[system.net.http] The backslash character may be used as a single-character quoting...
authorMarek Safar <marek.safar@gmail.com>
Mon, 14 Mar 2016 11:35:04 +0000 (12:35 +0100)
committerMarek Safar <marek.safar@gmail.com>
Mon, 14 Mar 2016 11:36:02 +0000 (12:36 +0100)
mcs/class/System.Net.Http/System.Net.Http.Headers/Lexer.cs
mcs/class/System.Net.Http/Test/System.Net.Http.Headers/EntityTagHeaderValueTest.cs

index 694bf6e56e6a1c22219502ef5c5376ce23a88a5c..71df86877c628509d872315c0238bba02efe6d46 100644 (file)
@@ -313,6 +313,20 @@ namespace System.Net.Http.Headers
                                        start = pos - 1;
                                        while (pos < s.Length) {
                                                ch = s [pos++];
+
+                                               //
+                                               // The backslash character ("\") MAY be used as a single-character
+                                               // quoting mechanism only within quoted-string
+                                               //
+                                               if (ch == '\\') {
+                                                       if (pos + 1 < s.Length) {
+                                                               ++pos;
+                                                               continue;
+                                                       }
+
+                                                       break;
+                                               }
+
                                                if (ch == '"') {
                                                        ttype = Token.Type.QuotedString;
                                                        break;
index 78c267072bfa51bb1b34cbf9e1fd9d3e34c8649a..5099ce425511f08c0662fd947ff9911398875c8a 100644 (file)
@@ -74,6 +74,12 @@ namespace MonoTests.System.Net.Http.Headers
                        Assert.AreEqual ("\"mm\"", res.Tag, "#11");
                        Assert.IsTrue (res.IsWeak, "#12");
                        Assert.AreEqual ("W/\"mm\"", res.ToString (), "#13");
+
+
+                       res = EntityTagHeaderValue.Parse ("\"\\\"123\\\"\"");
+                       Assert.AreEqual ("\"\\\"123\\\"\"", res.Tag, "#21");
+                       Assert.IsFalse (res.IsWeak, "#22");
+                       Assert.AreEqual ("\"\\\"123\\\"\"", res.ToString (), "#23");
                }
 
                [Test]