Reviewed by Sam.
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 12 Jan 2008 08:37:20 +0000 (08:37 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 12 Jan 2008 08:37:20 +0000 (08:37 +0000)
        - fixed <rdar://problem/5556374> REGRESSION: cross-domain error when one URL uses an explicit port number and another doesn't

        * platform/SecurityOrigin.cpp:
        (WebCore::isDefaultPortForProtocol):
        (WebCore::SecurityOrigin::SecurityOrigin):

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

WebCore/ChangeLog
WebCore/platform/SecurityOrigin.cpp

index bbc643cf4977bc7bc3df663ebe6828c6eecf47ee..8083012eba450059e6c8141364b588c39b0a897d 100644 (file)
@@ -1,3 +1,13 @@
+2008-01-12  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam.
+
+        - fixed <rdar://problem/5556374> REGRESSION: cross-domain error when one URL uses an explicit port number and another doesn't
+        
+        * platform/SecurityOrigin.cpp:
+        (WebCore::isDefaultPortForProtocol):
+        (WebCore::SecurityOrigin::SecurityOrigin):
+
 2008-01-11  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by Oliver Hunt.
 2008-01-11  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by Oliver Hunt.
index efc8aa982db48edcd33a0e66c308331e353287c1..4065b1949e4a42f47cbc4611854f6c93125f624b 100644 (file)
 
 namespace WebCore {
 
 
 namespace WebCore {
 
+static bool isDefaultPortForProtocol(unsigned short port, String protocol)
+{
+    if (protocol.isEmpty())
+        return false;
+
+    static HashMap<String, unsigned> defaultPorts;
+    if (defaultPorts.isEmpty()) {
+        defaultPorts.set("http", 80);
+        defaultPorts.set("https", 443);
+        defaultPorts.set("ftp", 21);
+        defaultPorts.set("ftps", 990);
+    }
+    return defaultPorts.get(protocol) == port;
+}
+
 SecurityOrigin::SecurityOrigin(const String& protocol, const String& host, unsigned short port)
     : m_protocol(protocol.lower())
     , m_host(host.lower())
 SecurityOrigin::SecurityOrigin(const String& protocol, const String& host, unsigned short port)
     : m_protocol(protocol.lower())
     , m_host(host.lower())
@@ -53,6 +68,12 @@ SecurityOrigin::SecurityOrigin(const String& protocol, const String& host, unsig
     // data: URLs are not allowed access to anything other than themselves.
     if (m_protocol == "data")
         m_noAccess = true;
     // data: URLs are not allowed access to anything other than themselves.
     if (m_protocol == "data")
         m_noAccess = true;
+
+
+    if (isDefaultPortForProtocol(m_port, m_protocol)) {
+        m_port = 0;
+        m_portSet = false;
+    }   
 }
 
 bool SecurityOrigin::isEmpty() const
 }
 
 bool SecurityOrigin::isEmpty() const