Changeset 207795 in webkit


Ignore:
Timestamp:
Oct 24, 2016 6:31:42 PM (7 years ago)
Author:
achristensen@apple.com
Message:

URLParser should match old URL::parse with %2E in path
https://bugs.webkit.org/show_bug.cgi?id=163929

Reviewed by Alexey Proskuryakov.

LayoutTests/imported/w3c:

  • web-platform-tests/url/a-element-expected.txt:
  • web-platform-tests/url/a-element-xhtml-expected.txt:
  • web-platform-tests/url/url-constructor-expected.txt:

Source/WebCore:

Covered by updated API tests, which show that URLParser now matches URL::parse in these cases.
Also covered by newly failing web platform tests, which were failing before URLParser was enabled.
If https://github.com/whatwg/url/issues/87 is resolved we can change behavior to match.

  • platform/URLParser.cpp:

(WebCore::URLParser::isSingleDotPathSegment):
(WebCore::URLParser::isDoubleDotPathSegment):
(WebCore::URLParser::consumeSingleDotPathSegment):
(WebCore::URLParser::consumeDoubleDotPathSegment):
(WebCore::URLParser::parse):
(WebCore::URLParser::isPercentEncodedDot): Deleted.

Tools:

  • TestWebKitAPI/Tests/WebCore/URLParser.cpp:

(TestWebKitAPI::TEST_F):

LayoutTests:

  • fast/url/path-expected.txt:
  • fast/url/standard-url-expected.txt:
  • fetch/fetch-url-serialization-expected.txt:
Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r207788 r207795  
     12016-10-24  Alex Christensen  <achristensen@webkit.org>
     2
     3        URLParser should match old URL::parse with %2E in path
     4        https://bugs.webkit.org/show_bug.cgi?id=163929
     5
     6        Reviewed by Alexey Proskuryakov.
     7
     8        * fast/url/path-expected.txt:
     9        * fast/url/standard-url-expected.txt:
     10        * fetch/fetch-url-serialization-expected.txt:
     11
    1122016-10-24  Brady Eidson  <beidson@apple.com>
    213
  • trunk/LayoutTests/fast/url/path-expected.txt

    r207162 r207795  
    1515PASS canonicalize('http://example.com/foo/../../..') is 'http://example.com/'
    1616PASS canonicalize('http://example.com/foo/../../../ton') is 'http://example.com/ton'
    17 PASS canonicalize('http://example.com/foo/%2e') is 'http://example.com/foo/'
    18 PASS canonicalize('http://example.com/foo/%2e%2') is 'http://example.com/foo/.%2'
    19 PASS canonicalize('http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar') is 'http://example.com/..bar'
     17FAIL canonicalize('http://example.com/foo/%2e') should be http://example.com/foo/. Was http://example.com/foo/%2e.
     18FAIL canonicalize('http://example.com/foo/%2e%2') should be http://example.com/foo/.%2. Was http://example.com/foo/%2e%2.
     19FAIL canonicalize('http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar') should be http://example.com/..bar. Was http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar.
    2020PASS canonicalize('http://example.com////../..') is 'http://example.com//'
    2121PASS canonicalize('http://example.com/foo/bar//../..') is 'http://example.com/foo/'
  • trunk/LayoutTests/fast/url/standard-url-expected.txt

    r207162 r207795  
    1010PASS canonicalize('http:////////user:@google.com:99?foo') is 'http://user@google.com:99/?foo'
    1111PASS canonicalize('http://192.0x00A80001') is 'http://192.168.0.1/'
    12 PASS canonicalize('http://www/foo%2Ehtml') is 'http://www/foo.html'
     12FAIL canonicalize('http://www/foo%2Ehtml') should be http://www/foo.html. Was http://www/foo%2Ehtml.
    1313PASS canonicalize('http://user:pass@/') is 'http://user:pass@/'
    1414PASS canonicalize('http://%25DOMAIN:foobar@foodomain.com/') is 'http://%25DOMAIN:foobar@foodomain.com/'
  • trunk/LayoutTests/fetch/fetch-url-serialization-expected.txt

    r207162 r207795  
    124124PASS Testing Request url 'http://example.com/foo/../../..' with base 'about:blank'
    125125PASS Testing Request url 'http://example.com/foo/../../../ton' with base 'about:blank'
    126 PASS Testing Request url 'http://example.com/foo/%2e' with base 'about:blank'
    127 PASS Testing Request url 'http://example.com/foo/%2e%2' with base 'about:blank'
    128 PASS Testing Request url 'http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar' with base 'about:blank'
     126FAIL Testing Request url 'http://example.com/foo/%2e' with base 'about:blank' assert_equals: expected "http://example.com/foo/" but got "http://example.com/foo/%2e"
     127FAIL Testing Request url 'http://example.com/foo/%2e%2' with base 'about:blank' assert_equals: expected "http://example.com/foo/.%2" but got "http://example.com/foo/%2e%2"
     128FAIL Testing Request url 'http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar' with base 'about:blank' assert_equals: expected "http://example.com/..bar" but got "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar"
    129129PASS Testing Request url 'http://example.com////../..' with base 'about:blank'
    130130PASS Testing Request url 'http://example.com/foo/bar//../..' with base 'about:blank'
     
    155155PASS Testing Request url 'http://www.google.com' with base 'about:blank'
    156156PASS Testing Request url 'http://192.0x00A80001' with base 'about:blank'
    157 PASS Testing Request url 'http://www/foo%2Ehtml' with base 'about:blank'
    158 PASS Testing Request url 'http://www/foo/%2E/html' with base 'about:blank'
     157FAIL Testing Request url 'http://www/foo%2Ehtml' with base 'about:blank' assert_equals: expected "http://www/foo.html" but got "http://www/foo%2Ehtml"
     158FAIL Testing Request url 'http://www/foo/%2E/html' with base 'about:blank' assert_equals: expected "http://www/foo/html" but got "http://www/foo/%2E/html"
    159159PASS Testing Request url 'http://user:pass@/' with base 'about:blank'
    160160PASS Testing Request url 'http://%25DOMAIN:foobar@foodomain.com/' with base 'about:blank'
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r207769 r207795  
     12016-10-24  Alex Christensen  <achristensen@webkit.org>
     2
     3        URLParser should match old URL::parse with %2E in path
     4        https://bugs.webkit.org/show_bug.cgi?id=163929
     5
     6        Reviewed by Alexey Proskuryakov.
     7
     8        * web-platform-tests/url/a-element-expected.txt:
     9        * web-platform-tests/url/a-element-xhtml-expected.txt:
     10        * web-platform-tests/url/url-constructor-expected.txt:
     11
    1122016-10-21  Alex Christensen  <achristensen@webkit.org>
    213
  • trunk/LayoutTests/imported/w3c/web-platform-tests/url/a-element-expected.txt

    r207769 r207795  
    127127PASS Parsing: <http://example.com/foo/../../..> against <about:blank>
    128128PASS Parsing: <http://example.com/foo/../../../ton> against <about:blank>
    129 PASS Parsing: <http://example.com/foo/%2e> against <about:blank>
    130 PASS Parsing: <http://example.com/foo/%2e%2> against <about:blank>
    131 PASS Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>
     129FAIL Parsing: <http://example.com/foo/%2e> against <about:blank> assert_equals: href expected "http://example.com/foo/" but got "http://example.com/foo/%2e"
     130FAIL Parsing: <http://example.com/foo/%2e%2> against <about:blank> assert_equals: href expected "http://example.com/foo/.%2" but got "http://example.com/foo/%2e%2"
     131FAIL Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> assert_equals: href expected "http://example.com/..bar" but got "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar"
    132132PASS Parsing: <http://example.com////../..> against <about:blank>
    133133PASS Parsing: <http://example.com/foo/bar//../..> against <about:blank>
     
    158158PASS Parsing: <http://www.google.com> against <about:blank>
    159159PASS Parsing: <http://192.0x00A80001> against <about:blank>
    160 PASS Parsing: <http://www/foo%2Ehtml> against <about:blank>
    161 PASS Parsing: <http://www/foo/%2E/html> against <about:blank>
     160FAIL Parsing: <http://www/foo%2Ehtml> against <about:blank> assert_equals: href expected "http://www/foo.html" but got "http://www/foo%2Ehtml"
     161FAIL Parsing: <http://www/foo/%2E/html> against <about:blank> assert_equals: href expected "http://www/foo/html" but got "http://www/foo/%2E/html"
    162162PASS Parsing: <http://user:pass@/> against <about:blank>
    163163PASS Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/url/a-element-xhtml-expected.txt

    r207769 r207795  
    127127PASS Parsing: <http://example.com/foo/../../..> against <about:blank>
    128128PASS Parsing: <http://example.com/foo/../../../ton> against <about:blank>
    129 PASS Parsing: <http://example.com/foo/%2e> against <about:blank>
    130 PASS Parsing: <http://example.com/foo/%2e%2> against <about:blank>
    131 PASS Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>
     129FAIL Parsing: <http://example.com/foo/%2e> against <about:blank> assert_equals: href expected "http://example.com/foo/" but got "http://example.com/foo/%2e"
     130FAIL Parsing: <http://example.com/foo/%2e%2> against <about:blank> assert_equals: href expected "http://example.com/foo/.%2" but got "http://example.com/foo/%2e%2"
     131FAIL Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> assert_equals: href expected "http://example.com/..bar" but got "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar"
    132132PASS Parsing: <http://example.com////../..> against <about:blank>
    133133PASS Parsing: <http://example.com/foo/bar//../..> against <about:blank>
     
    158158PASS Parsing: <http://www.google.com> against <about:blank>
    159159PASS Parsing: <http://192.0x00A80001> against <about:blank>
    160 PASS Parsing: <http://www/foo%2Ehtml> against <about:blank>
    161 PASS Parsing: <http://www/foo/%2E/html> against <about:blank>
     160FAIL Parsing: <http://www/foo%2Ehtml> against <about:blank> assert_equals: href expected "http://www/foo.html" but got "http://www/foo%2Ehtml"
     161FAIL Parsing: <http://www/foo/%2E/html> against <about:blank> assert_equals: href expected "http://www/foo/html" but got "http://www/foo/%2E/html"
    162162PASS Parsing: <http://user:pass@/> against <about:blank>
    163163PASS Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/url/url-constructor-expected.txt

    r207769 r207795  
    131131PASS Parsing: <http://example.com/foo/../../..> against <about:blank>
    132132PASS Parsing: <http://example.com/foo/../../../ton> against <about:blank>
    133 PASS Parsing: <http://example.com/foo/%2e> against <about:blank>
    134 PASS Parsing: <http://example.com/foo/%2e%2> against <about:blank>
    135 PASS Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>
     133FAIL Parsing: <http://example.com/foo/%2e> against <about:blank> assert_equals: href expected "http://example.com/foo/" but got "http://example.com/foo/%2e"
     134FAIL Parsing: <http://example.com/foo/%2e%2> against <about:blank> assert_equals: href expected "http://example.com/foo/.%2" but got "http://example.com/foo/%2e%2"
     135FAIL Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank> assert_equals: href expected "http://example.com/..bar" but got "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar"
    136136PASS Parsing: <http://example.com////../..> against <about:blank>
    137137PASS Parsing: <http://example.com/foo/bar//../..> against <about:blank>
     
    162162PASS Parsing: <http://www.google.com> against <about:blank>
    163163PASS Parsing: <http://192.0x00A80001> against <about:blank>
    164 PASS Parsing: <http://www/foo%2Ehtml> against <about:blank>
    165 PASS Parsing: <http://www/foo/%2E/html> against <about:blank>
     164FAIL Parsing: <http://www/foo%2Ehtml> against <about:blank> assert_equals: href expected "http://www/foo.html" but got "http://www/foo%2Ehtml"
     165FAIL Parsing: <http://www/foo/%2E/html> against <about:blank> assert_equals: href expected "http://www/foo/html" but got "http://www/foo/%2E/html"
    166166PASS Parsing: <http://user:pass@/> against <about:blank>
    167167PASS Parsing: <http://%25DOMAIN:foobar@foodomain.com/> against <about:blank>
  • trunk/Source/WebCore/ChangeLog

    r207794 r207795  
     12016-10-24  Alex Christensen  <achristensen@webkit.org>
     2
     3        URLParser should match old URL::parse with %2E in path
     4        https://bugs.webkit.org/show_bug.cgi?id=163929
     5
     6        Reviewed by Alexey Proskuryakov.
     7
     8        Covered by updated API tests, which show that URLParser now matches URL::parse in these cases.
     9        Also covered by newly failing web platform tests, which were failing before URLParser was enabled.
     10        If https://github.com/whatwg/url/issues/87 is resolved we can change behavior to match.
     11
     12        * platform/URLParser.cpp:
     13        (WebCore::URLParser::isSingleDotPathSegment):
     14        (WebCore::URLParser::isDoubleDotPathSegment):
     15        (WebCore::URLParser::consumeSingleDotPathSegment):
     16        (WebCore::URLParser::consumeDoubleDotPathSegment):
     17        (WebCore::URLParser::parse):
     18        (WebCore::URLParser::isPercentEncodedDot): Deleted.
     19
    1202016-10-24  Per Arne Vollan  <pvollan@apple.com>
    221
  • trunk/Source/WebCore/platform/URLParser.cpp

    r207769 r207795  
    892892}
    893893
    894 static const char* dotASCIICode = "2e";
    895 
    896 template<typename CharacterType>
    897 ALWAYS_INLINE bool URLParser::isPercentEncodedDot(CodePointIterator<CharacterType> c)
    898 {
    899     if (c.atEnd())
    900         return false;
    901     if (*c != '%')
    902         return false;
    903     advance<CharacterType, ReportSyntaxViolation::No>(c);
    904     if (c.atEnd())
    905         return false;
    906     if (*c != dotASCIICode[0])
    907         return false;
    908     advance<CharacterType, ReportSyntaxViolation::No>(c);
    909     if (c.atEnd())
    910         return false;
    911     return toASCIILower(*c) == dotASCIICode[1];
    912 }
    913 
    914894template<typename CharacterType>
    915895ALWAYS_INLINE bool URLParser::isSingleDotPathSegment(CodePointIterator<CharacterType> c)
     
    921901        return c.atEnd() || isSlashQuestionOrHash(*c);
    922902    }
    923     if (*c != '%')
    924         return false;
    925     advance<CharacterType, ReportSyntaxViolation::No>(c);
    926     if (c.atEnd() || *c != dotASCIICode[0])
    927         return false;
    928     advance<CharacterType, ReportSyntaxViolation::No>(c);
    929     if (c.atEnd())
    930         return false;
    931     if (toASCIILower(*c) == dotASCIICode[1]) {
    932         advance<CharacterType, ReportSyntaxViolation::No>(c);
    933         return c.atEnd() || isSlashQuestionOrHash(*c);
    934     }
    935903    return false;
    936904}
     
    945913        return isSingleDotPathSegment(c);
    946914    }
    947     if (*c != '%')
    948         return false;
    949     advance<CharacterType, ReportSyntaxViolation::No>(c);
    950     if (c.atEnd() || *c != dotASCIICode[0])
    951         return false;
    952     advance<CharacterType, ReportSyntaxViolation::No>(c);
    953     if (c.atEnd())
    954         return false;
    955     if (toASCIILower(*c) == dotASCIICode[1]) {
    956         advance<CharacterType, ReportSyntaxViolation::No>(c);
    957         return isSingleDotPathSegment(c);
    958     }
    959915    return false;
    960916}
     
    964920{
    965921    ASSERT(isSingleDotPathSegment(c));
    966     if (*c == '.') {
    967         advance(c);
    968         if (!c.atEnd()) {
    969             if (*c == '/' || *c == '\\')
    970                 advance(c);
    971             else
    972                 ASSERT(*c == '?' || *c == '#');
    973         }
    974     } else {
    975         ASSERT(*c == '%');
    976         advance(c);
    977         ASSERT(*c == dotASCIICode[0]);
    978         advance(c);
    979         ASSERT(toASCIILower(*c) == dotASCIICode[1]);
    980         advance(c);
    981         if (!c.atEnd()) {
    982             if (*c == '/' || *c == '\\')
    983                 advance(c);
    984             else
    985                 ASSERT(*c == '?' || *c == '#');
    986         }
     922    advance(c);
     923    if (!c.atEnd()) {
     924        if (*c == '/' || *c == '\\')
     925            advance(c);
     926        else
     927            ASSERT(*c == '?' || *c == '#');
    987928    }
    988929}
     
    992933{
    993934    ASSERT(isDoubleDotPathSegment(c));
    994     if (*c == '.')
    995         advance(c);
    996     else {
    997         ASSERT(*c == '%');
    998         advance(c);
    999         ASSERT(*c == dotASCIICode[0]);
    1000         advance(c);
    1001         ASSERT(toASCIILower(*c) == dotASCIICode[1]);
    1002         advance(c);
    1003     }
     935    advance(c);
    1004936    consumeSingleDotPathSegment(c);
    1005937}
     
    17221654                m_url.m_queryEnd = m_url.m_pathEnd;
    17231655                state = State::Fragment;
    1724                 break;
    1725             }
    1726             if (UNLIKELY(isPercentEncodedDot(c))) {
    1727                 syntaxViolation(c);
    1728                 appendToASCIIBuffer('.');
    1729                 ASSERT(*c == '%');
    1730                 advance(c);
    1731                 ASSERT(*c == dotASCIICode[0]);
    1732                 advance(c);
    1733                 ASSERT(toASCIILower(*c) == dotASCIICode[1]);
    1734                 advance(c);
    17351656                break;
    17361657            }
     
    28692790bool URLParser::enabled()
    28702791{
     2792    return true;
     2793    /*
    28712794    if (urlParserEnabled == URLParserEnabled::Undetermined) {
    28722795#if PLATFORM(MAC)
     
    28792802    }
    28802803    return urlParserEnabled == URLParserEnabled::Yes;
     2804     */
    28812805}
    28822806
  • trunk/Tools/ChangeLog

    r207769 r207795  
     12016-10-24  Alex Christensen  <achristensen@webkit.org>
     2
     3        URLParser should match old URL::parse with %2E in path
     4        https://bugs.webkit.org/show_bug.cgi?id=163929
     5
     6        Reviewed by Alexey Proskuryakov.
     7
     8        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
     9        (TestWebKitAPI::TEST_F):
     10
    1112016-10-21  Alex Christensen  <achristensen@webkit.org>
    212
  • trunk/Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp

    r207769 r207795  
    597597        {"http", "", "", "127.0.0.1", 0, "/", "", "", "http://127.0.0.1/"},
    598598        {"http", "", "", "127.0.0.01", 0, "/", "", "", "http://127.0.0.01/"});
    599     checkURLDifferences("http://example.com/path1/.%2e",
    600         {"http", "", "", "example.com", 0, "/", "", "", "http://example.com/"},
    601         {"http", "", "", "example.com", 0, "/path1/.%2e", "", "", "http://example.com/path1/.%2e"});
    602     checkURLDifferences("http://example.com/path1/.%2E",
    603         {"http", "", "", "example.com", 0, "/", "", "", "http://example.com/"},
    604         {"http", "", "", "example.com", 0, "/path1/.%2E", "", "", "http://example.com/path1/.%2E"});
    605     checkURLDifferences("http://example.com/path1/.%2E/",
    606         {"http", "", "", "example.com", 0, "/", "", "", "http://example.com/"},
    607         {"http", "", "", "example.com", 0, "/path1/.%2E/", "", "", "http://example.com/path1/.%2E/"});
    608     checkURLDifferences("http://example.com/path1/%2e.",
    609         {"http", "", "", "example.com", 0, "/", "", "", "http://example.com/"},
    610         {"http", "", "", "example.com", 0, "/path1/%2e.", "", "", "http://example.com/path1/%2e."});
    611     checkURLDifferences("http://example.com/path1/%2E%2e",
    612         {"http", "", "", "example.com", 0, "/", "", "", "http://example.com/"},
    613         {"http", "", "", "example.com", 0, "/path1/%2E%2e", "", "", "http://example.com/path1/%2E%2e"});
    614     checkURLDifferences("http://example.com/path1/%2e",
    615         {"http", "", "", "example.com", 0, "/path1/", "", "", "http://example.com/path1/"},
    616         {"http", "", "", "example.com", 0, "/path1/%2e", "", "", "http://example.com/path1/%2e"});
    617     checkURLDifferences("http://example.com/path1/%2E",
    618         {"http", "", "", "example.com", 0, "/path1/", "", "", "http://example.com/path1/"},
    619         {"http", "", "", "example.com", 0, "/path1/%2E", "", "", "http://example.com/path1/%2E"});
    620     checkURLDifferences("http://example.com/path1/%2E/",
    621         {"http", "", "", "example.com", 0, "/path1/", "", "", "http://example.com/path1/"},
    622         {"http", "", "", "example.com", 0, "/path1/%2E/", "", "", "http://example.com/path1/%2E/"});
    623     checkURLDifferences("http://example.com/path1/path2/%2e?query",
    624         {"http", "", "", "example.com", 0, "/path1/path2/", "query", "", "http://example.com/path1/path2/?query"},
    625         {"http", "", "", "example.com", 0, "/path1/path2/%2e", "query", "", "http://example.com/path1/path2/%2e?query"});
    626     checkURLDifferences("http://example.com/path1/path2/%2e%2e?query",
    627         {"http", "", "", "example.com", 0, "/path1/", "query", "", "http://example.com/path1/?query"},
    628         {"http", "", "", "example.com", 0, "/path1/path2/%2e%2e", "query", "", "http://example.com/path1/path2/%2e%2e?query"});
    629     checkURLDifferences("http://example.com/path1/path2/%2e#fragment",
    630         {"http", "", "", "example.com", 0, "/path1/path2/", "", "fragment", "http://example.com/path1/path2/#fragment"},
    631         {"http", "", "", "example.com", 0, "/path1/path2/%2e", "", "fragment", "http://example.com/path1/path2/%2e#fragment"});
    632     checkURLDifferences("http://example.com/path1/path2/%2e%2e#fragment",
    633         {"http", "", "", "example.com", 0, "/path1/", "", "fragment", "http://example.com/path1/#fragment"},
    634         {"http", "", "", "example.com", 0, "/path1/path2/%2e%2e", "", "fragment", "http://example.com/path1/path2/%2e%2e#fragment"});
     599    checkURL("http://example.com/path1/.%2e", {"http", "", "", "example.com", 0, "/path1/.%2e", "", "", "http://example.com/path1/.%2e"});
     600    checkURL("http://example.com/path1/.%2E", {"http", "", "", "example.com", 0, "/path1/.%2E", "", "", "http://example.com/path1/.%2E"});
     601    checkURL("http://example.com/path1/.%2E/", {"http", "", "", "example.com", 0, "/path1/.%2E/", "", "", "http://example.com/path1/.%2E/"});
     602    checkURL("http://example.com/path1/%2e.", {"http", "", "", "example.com", 0, "/path1/%2e.", "", "", "http://example.com/path1/%2e."});
     603    checkURL("http://example.com/path1/%2E%2e", {"http", "", "", "example.com", 0, "/path1/%2E%2e", "", "", "http://example.com/path1/%2E%2e"});
     604    checkURL("http://example.com/path1/%2e", {"http", "", "", "example.com", 0, "/path1/%2e", "", "", "http://example.com/path1/%2e"});
     605    checkURL("http://example.com/path1/%2E", {"http", "", "", "example.com", 0, "/path1/%2E", "", "", "http://example.com/path1/%2E"});
     606    checkURL("http://example.com/path1/%2E/", {"http", "", "", "example.com", 0, "/path1/%2E/", "", "", "http://example.com/path1/%2E/"});
     607    checkURL("http://example.com/path1/path2/%2e?query", {"http", "", "", "example.com", 0, "/path1/path2/%2e", "query", "", "http://example.com/path1/path2/%2e?query"});
     608    checkURL("http://example.com/path1/path2/%2e%2e?query", {"http", "", "", "example.com", 0, "/path1/path2/%2e%2e", "query", "", "http://example.com/path1/path2/%2e%2e?query"});
     609    checkURL("http://example.com/path1/path2/%2e#fragment", {"http", "", "", "example.com", 0, "/path1/path2/%2e", "", "fragment", "http://example.com/path1/path2/%2e#fragment"});
     610    checkURL("http://example.com/path1/path2/%2e%2e#fragment", {"http", "", "", "example.com", 0, "/path1/path2/%2e%2e", "", "fragment", "http://example.com/path1/path2/%2e%2e#fragment"});
    635611    checkURLDifferences("file://[0:a:0:0:b:c:0:0]/path",
    636612        {"file", "", "", "[0:a::b:c:0:0]", 0, "/path", "", "", "file://[0:a::b:c:0:0]/path"},
     
    735711        {"http", "", "", "192.168.0.1", 0, "/", "", "", "http://192.168.0.1/"},
    736712        {"http", "", "", "0xc0.0250.01", 0, "/", "", "", "http://0xc0.0250.01/"});
    737     checkURLDifferences("http://host/path%2e.%2E",
    738         {"http", "", "", "host", 0, "/path...", "", "", "http://host/path..."},
    739         {"http", "", "", "host", 0, "/path%2e.%2E", "", "", "http://host/path%2e.%2E"});
     713
     714    checkURL("http://host/path%2e.%2E", {"http", "", "", "host", 0, "/path%2e.%2E", "", "", "http://host/path%2e.%2E"});
    740715
    741716    checkRelativeURLDifferences(utf16String(u"http://foo:💩@example.com/bar"), "http://other.com/",
Note: See TracChangeset for help on using the changeset viewer.