Changeset 207303 in webkit


Ignore:
Timestamp:
Oct 13, 2016 1:03:39 PM (8 years ago)
Author:
matthew_hanson@apple.com
Message:

Merge r207268. rdar://problem/28756748

Location:
tags/Safari-603.1.9/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • tags/Safari-603.1.9/Source/WebCore/ChangeLog

    r207232 r207303  
     12016-10-13  Matthew Hanson  <matthew_hanson@apple.com>
     2
     3        Merge r207268. rdar://problem/28756748
     4
     5    2016-10-12  Alex Christensen  <achristensen@webkit.org>
     6
     7            Mail needs nonspecial URLs to keep case in host and not have slash after host
     8            https://bugs.webkit.org/show_bug.cgi?id=163373
     9
     10            Reviewed by Saam Barati.
     11
     12            Mail uses urls like scheme://HoSt which were not changed when canonicalized
     13            before enabling the URLParser but now are canonicalized to scheme://host/
     14            I manually verified this fixes the issue.
     15            This should be reverted once Mail will accept modern canonicalized URLs.
     16
     17            * platform/URLParser.cpp:
     18            (WebCore::URLParser::parse):
     19            (WebCore::URLParser::parseHostAndPort):
     20            * platform/URLParser.h:
     21            If the application is mail and the scheme is nonspecial, don't make the host lower case and don't add a slash after the host.
     22
    1232016-10-12  Jeremy Huddleston Sequoia  <jeremyhu@apple.com>
    224
  • tags/Safari-603.1.9/Source/WebCore/platform/URLParser.cpp

    r207162 r207303  
    2828
    2929#include "Logging.h"
     30#include "RuntimeApplicationChecks.h"
    3031#include <array>
    3132#include <unicode/uidna.h>
     
    11281129void URLParser::parse(const CharacterType* input, const unsigned length, const URL& base, const TextEncoding& encoding)
    11291130{
     1131#if PLATFORM(MAC)
     1132    static bool isMail = MacApplication::isAppleMail();
     1133#else
     1134    static bool isMail = false;
     1135#endif
     1136   
    11301137    URL_PARSER_LOG("Parsing URL <%s> base <%s> encoding <%s>", String(input, length).utf8().data(), base.string().utf8().data(), encoding.name());
    11311138    m_url = { };
     
    14541461                        m_url.m_userEnd = currentPosition(authorityOrHostBegin);
    14551462                        m_url.m_passwordEnd = m_url.m_userEnd;
    1456                         if (!parseHostAndPort(iterator)) {
     1463                        if (!parseHostAndPort(iterator, isMail)) {
    14571464                            failure();
    14581465                            return;
     
    14761483                LOG_STATE("Host");
    14771484                if (*c == '/' || *c == '?' || *c == '#') {
    1478                     if (!parseHostAndPort(CodePointIterator<CharacterType>(authorityOrHostBegin, c))) {
     1485                    if (!parseHostAndPort(CodePointIterator<CharacterType>(authorityOrHostBegin, c), isMail)) {
    14791486                        failure();
    14801487                        return;
     
    16471654                        break;
    16481655                    }
    1649                     if (!parseHostAndPort(CodePointIterator<CharacterType>(authorityOrHostBegin, c))) {
     1656                    if (!parseHostAndPort(CodePointIterator<CharacterType>(authorityOrHostBegin, c), isMail)) {
    16501657                        failure();
    16511658                        return;
     
    18671874            m_url.m_portEnd = m_url.m_userStart;
    18681875            m_url.m_pathEnd = m_url.m_userStart + 2;
    1869         } else if (!parseHostAndPort(authorityOrHostBegin)) {
     1876        } else if (!parseHostAndPort(authorityOrHostBegin, isMail)) {
    18701877            failure();
    18711878            return;
    18721879        } else {
    1873             syntaxViolation(c);
    1874             appendToASCIIBuffer('/');
    1875             m_url.m_pathEnd = m_url.m_portEnd + 1;
     1880            if (LIKELY(!isMail || m_urlIsSpecial)) {
     1881                syntaxViolation(c);
     1882                appendToASCIIBuffer('/');
     1883                m_url.m_pathEnd = m_url.m_portEnd + 1;
     1884            } else
     1885                m_url.m_pathEnd = m_url.m_portEnd;
    18761886        }
    18771887        m_url.m_pathAfterLastSlash = m_url.m_pathEnd;
     
    18811891    case State::Host:
    18821892        LOG_FINAL_STATE("Host");
    1883         if (!parseHostAndPort(authorityOrHostBegin)) {
     1893        if (!parseHostAndPort(authorityOrHostBegin, isMail)) {
    18841894            failure();
    18851895            return;
    18861896        }
    1887         syntaxViolation(c);
    1888         appendToASCIIBuffer('/');
    1889         m_url.m_pathEnd = m_url.m_portEnd + 1;
     1897        if (LIKELY(!isMail || m_urlIsSpecial)) {
     1898            syntaxViolation(c);
     1899            appendToASCIIBuffer('/');
     1900            m_url.m_pathEnd = m_url.m_portEnd + 1;
     1901        } else
     1902            m_url.m_pathEnd = m_url.m_portEnd;
    18901903        m_url.m_pathAfterLastSlash = m_url.m_pathEnd;
    18911904        m_url.m_queryEnd = m_url.m_pathEnd;
     
    19411954        }
    19421955
    1943         if (!parseHostAndPort(CodePointIterator<CharacterType>(authorityOrHostBegin, c))) {
     1956        if (!parseHostAndPort(CodePointIterator<CharacterType>(authorityOrHostBegin, c), isMail)) {
    19441957            failure();
    19451958            return;
     
    25562569
    25572570template<typename CharacterType>
    2558 bool URLParser::parseHostAndPort(CodePointIterator<CharacterType> iterator)
     2571bool URLParser::parseHostAndPort(CodePointIterator<CharacterType> iterator, const bool& isMail)
    25592572{
    25602573    if (iterator.atEnd())
     
    26062619        for (; hostIterator != iterator; ++hostIterator) {
    26072620            if (LIKELY(!isTabOrNewline(*hostIterator))) {
    2608                 if (UNLIKELY(isASCIIUpper(*hostIterator)))
    2609                     syntaxViolation(hostIterator);
    2610                 appendToASCIIBuffer(toASCIILower(*hostIterator));
     2621                if (UNLIKELY(isMail && !m_urlIsSpecial))
     2622                    appendToASCIIBuffer(*hostIterator);
     2623                else {
     2624                    if (UNLIKELY(isASCIIUpper(*hostIterator)))
     2625                        syntaxViolation(hostIterator);
     2626                    appendToASCIIBuffer(toASCIILower(*hostIterator));
     2627                }
    26112628            } else
    26122629                syntaxViolation(hostIterator);
  • tags/Safari-603.1.9/Source/WebCore/platform/URLParser.h

    r207152 r207303  
    6161    template<typename CharacterType> void parse(const CharacterType*, const unsigned length, const URL&, const TextEncoding&);
    6262    template<typename CharacterType> void parseAuthority(CodePointIterator<CharacterType>);
    63     template<typename CharacterType> bool parseHostAndPort(CodePointIterator<CharacterType>);
     63    template<typename CharacterType> bool parseHostAndPort(CodePointIterator<CharacterType>, const bool& isMail);
    6464    template<typename CharacterType> bool parsePort(CodePointIterator<CharacterType>&);
    6565
Note: See TracChangeset for help on using the changeset viewer.