URLParser: Fix parsing relative URLs with one slash after the scheme:
authorachristensen@apple.com <achristensen@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Sep 2016 18:31:27 +0000 (18:31 +0000)
committerachristensen@apple.com <achristensen@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Sep 2016 18:31:27 +0000 (18:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=162294

Reviewed by Tim Horton.

Source/WebCore:

This fixes the relatively-obscure case where a relative URL has the same special scheme as the base,
but there is only one slash after the scheme: at the beginning of the relative URL.  According to spec,
this should be interpreted the same as if the scheme: were not there.
For example, parsing "http:/example.com/" relative to "http://example.org/foo/bar" should be the same as
parsing "/example.com/" relative to "http://example.org/foo/bar".

Covered by a new API test.

* platform/URLParser.cpp:
(WebCore::URLParser::parse):

Tools:

* TestWebKitAPI/Tests/WebCore/URLParser.cpp:
(TestWebKitAPI::TEST_F):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@206158 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/URLParser.cpp
Tools/ChangeLog
Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp

index 45ce678..a2fd47e 100644 (file)
@@ -1,5 +1,23 @@
 2016-09-20  Alex Christensen  <achristensen@webkit.org>
 
+        URLParser: Fix parsing relative URLs with one slash after the scheme:
+        https://bugs.webkit.org/show_bug.cgi?id=162294
+
+        Reviewed by Tim Horton.
+
+        This fixes the relatively-obscure case where a relative URL has the same special scheme as the base,
+        but there is only one slash after the scheme: at the beginning of the relative URL.  According to spec,
+        this should be interpreted the same as if the scheme: were not there.
+        For example, parsing "http:/example.com/" relative to "http://example.org/foo/bar" should be the same as
+        parsing "/example.com/" relative to "http://example.org/foo/bar".
+
+        Covered by a new API test.
+
+        * platform/URLParser.cpp:
+        (WebCore::URLParser::parse):
+
+2016-09-20  Alex Christensen  <achristensen@webkit.org>
+
         Fix Windows file URL quirks in URLParser
         https://bugs.webkit.org/show_bug.cgi?id=162303
 
index b989118..0480bad 100644 (file)
@@ -1063,7 +1063,8 @@ URL URLParser::parse(const CharacterType* input, const unsigned length, const UR
                     m_asciiBuffer.append('/');
                     state = State::SpecialAuthorityIgnoreSlashes;
                     ++c;
-                }
+                } else
+                    state = State::RelativeSlash;
             } else
                 state = State::Relative;
             break;
index 07ea67b..ff935ef 100644 (file)
@@ -1,5 +1,15 @@
 2016-09-20  Alex Christensen  <achristensen@webkit.org>
 
+        URLParser: Fix parsing relative URLs with one slash after the scheme:
+        https://bugs.webkit.org/show_bug.cgi?id=162294
+
+        Reviewed by Tim Horton.
+
+        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
+        (TestWebKitAPI::TEST_F):
+
+2016-09-20  Alex Christensen  <achristensen@webkit.org>
+
         Fix Windows file URL quirks in URLParser
         https://bugs.webkit.org/show_bug.cgi?id=162303
 
index 273cc83..5291a47 100644 (file)
@@ -474,6 +474,9 @@ TEST_F(URLParserTest, ParserDifferences)
     checkURLDifferences("http:",
         {"http", "", "", "", 0, "", "", "", "http:"},
         {"http", "", "", "", 0, "/", "", "", "http:/"});
+    checkRelativeURLDifferences("http:/example.com/", "http://example.org/foo/bar",
+        {"http", "", "", "example.org", 0, "/example.com/", "", "", "http://example.org/example.com/"},
+        {"http", "", "", "example.com", 0, "/", "", "", "http://example.com/"});
     
     // This behavior matches Chrome and Firefox, but not WebKit using URL::parse.
     // The behavior of URL::parse is clearly wrong because reparsing file://path would make path the host.