Update originsMatch to handle the case of file origins which enforce file path separation
authoryouenn@apple.com <youenn@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 1 Mar 2019 21:31:05 +0000 (21:31 +0000)
committeryouenn@apple.com <youenn@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 1 Mar 2019 21:31:05 +0000 (21:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=195216

Reviewed by Brady Eidson.

Covered by the assertion and existing tests like fast/xmlhttprequest/xmlhttprequest-no-file-access.html.
Make sure originsMatch returns true if either compared origins are the same object
or they have the same file path separation behavior.

* page/SecurityOrigin.cpp:
(WebCore::areOriginsMatching):
(WebCore::originsMatch):

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

Source/WebCore/ChangeLog
Source/WebCore/page/SecurityOrigin.cpp

index 7b16763..5c0c671 100644 (file)
@@ -1,5 +1,20 @@
 2019-03-01  Youenn Fablet  <youenn@apple.com>
 
+        Update originsMatch to handle the case of file origins which enforce file path separation
+        https://bugs.webkit.org/show_bug.cgi?id=195216
+
+        Reviewed by Brady Eidson.
+
+        Covered by the assertion and existing tests like fast/xmlhttprequest/xmlhttprequest-no-file-access.html.
+        Make sure originsMatch returns true if either compared origins are the same object
+        or they have the same file path separation behavior.
+
+        * page/SecurityOrigin.cpp:
+        (WebCore::areOriginsMatching):
+        (WebCore::originsMatch):
+
+2019-03-01  Youenn Fablet  <youenn@apple.com>
+
         Serialize IndexedDB::ObjectStoreOverwriteMode as an enum
         https://bugs.webkit.org/show_bug.cgi?id=195213
 
index 809e547..218c983 100644 (file)
@@ -473,6 +473,8 @@ String SecurityOrigin::toRawString() const
 
 static inline bool areOriginsMatching(const SecurityOrigin& origin1, const SecurityOrigin& origin2)
 {
+    ASSERT(&origin1 != &origin2);
+
     if (origin1.isUnique() || origin2.isUnique())
         return origin1.isUnique() == origin2.isUnique();
 
@@ -480,7 +482,7 @@ static inline bool areOriginsMatching(const SecurityOrigin& origin1, const Secur
         return false;
 
     if (origin1.protocol() == "file")
-        return true;
+        return origin1.enforcesFilePathSeparation() == origin2.enforcesFilePathSeparation();
 
     if (origin1.host() != origin2.host())
         return false;
@@ -488,12 +490,13 @@ static inline bool areOriginsMatching(const SecurityOrigin& origin1, const Secur
     return origin1.port() == origin2.port();
 }
 
-// This function mimics the result of string comparison of serialized origins
+// This function mimics the result of string comparison of serialized origins.
 bool originsMatch(const SecurityOrigin& origin1, const SecurityOrigin& origin2)
 {
     if (&origin1 == &origin2)
         return true;
 
+    ASSERT(areOriginsMatching(origin1, origin2) == (origin1.toString() == origin2.toString()));
     return areOriginsMatching(origin1, origin2);
 }