Title: [210068] tags/Safari-604.1.1

Diff

Modified: tags/Safari-604.1.1/LayoutTests/ChangeLog (210067 => 210068)


--- tags/Safari-604.1.1/LayoutTests/ChangeLog	2016-12-21 19:05:00 UTC (rev 210067)
+++ tags/Safari-604.1.1/LayoutTests/ChangeLog	2016-12-21 19:06:35 UTC (rev 210068)
@@ -1,5 +1,9 @@
 2016-12-21  Babak Shafiei  <[email protected]>
 
+        Roll out r209261.
+
+2016-12-21  Babak Shafiei  <[email protected]>
+
         Roll out r209510.
 
 2016-12-20  Myles C. Maxfield  <[email protected]>

Deleted: tags/Safari-604.1.1/LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight-expected.txt (210067 => 210068)


--- tags/Safari-604.1.1/LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight-expected.txt	2016-12-21 19:05:00 UTC (rev 210067)
+++ tags/Safari-604.1.1/LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight-expected.txt	2016-12-21 19:06:35 UTC (rev 210068)
@@ -1,21 +0,0 @@
-CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php. Request header field Accept is not allowed by Access-Control-Allow-Headers.
-CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php. Request header field Accept-Language is not allowed by Access-Control-Allow-Headers.
-CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php. Request header field Content-Language is not allowed by Access-Control-Allow-Headers.
-CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php. Request header field Content-Language is not allowed by Access-Control-Allow-Headers.
-CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php. Request header field Accept is not allowed by Access-Control-Allow-Headers.
-PASS Accept header with normal value SHOULD NOT cause a preflight
-PASS Accept header value with all allowed non-alphanumeric characters SHOULD NOT cause a preflight
-PASS Accept-Language header with normal value SHOULD NOT cause a preflight
-PASS Accept-Language header value with all allowed non-alphanumeric characters SHOULD NOT cause a preflight
-PASS Content-Language header with normal value SHOULD NOT cause a preflight
-PASS Content-Language header value with all allowed non-alphanumeric characters SHOULD NOT cause a preflight
-PASS Accept header with abnormal value SHOULD cause a preflight
-PASS Accept-Language header with abnormal value SHOULD cause a preflight
-PASS Content-Language header with abnormal value SHOULD cause a preflight
-PASS Accept header with normal value, Accept-Language header with normal value, and Content-Language header with abnormal value SHOULD cause a preflight
-PASS Accept header with normal value and then another Accept header with abnormal value SHOULD cause a preflight
-PASS Accept header with abnormal value and explicitly allowed headers SHOULD be allowed
-PASS Content-Language header with abnormal value and explicitly allowed headers SHOULD be allowed
-PASS Accept header with normal value, Accept-Language header with normal value, Content-Language header with abnormal value, and explicitly allowed headers SHOULD be allowed
-PASS Accept header with normal value, then another Accept header with abnormal value, and explicitly allowed headers SHOULD be allowed
-

Deleted: tags/Safari-604.1.1/LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html (210067 => 210068)


--- tags/Safari-604.1.1/LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html	2016-12-21 19:05:00 UTC (rev 210067)
+++ tags/Safari-604.1.1/LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html	2016-12-21 19:06:35 UTC (rev 210068)
@@ -1,160 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>Non-Standard Safelisted Headers SHOULD Trigger a Preflight</title>
-    <script src=""
-</head>
-<body>
-<!-- https://fetch.spec.whatwg.org/#cors-safelisted-request-header -->
-<script>
-    if (window.testRunner) {
-        testRunner.dumpAsText();
-        testRunner.waitUntilDone();
-    }
-
-    var xhr;
-    var url = '';
-
-    function createReadyStateHandler (description, testNumber) {
-        return function handler (e) {
-            if (xhr.readyState === XMLHttpRequest.DONE) {
-                testPassed(description);
-                nextStep(testNumber);
-            }
-        }
-    }
-
-    function createOnErrorHandler (description, testNumber) {
-        return function handler (e) {
-            e.preventDefault();
-            testPassed(description);
-            nextStep(testNumber);
-        }
-    }
-
-    var abnormalSimpleCorsHeaderValue = "() { :;};"
-    var allAllowedNonAlphanumericCharactersForAcceptHeader = " *./;="
-    var allAllowedNonAlphanumericCharactersForAcceptAndContentLanguageHeader = " *-.;="
-    var testCases = [
-        // Positive test cases with normal headers
-        {
-            headersToAdd: [{ name : "Accept", value: "text/*" }],
-            explicitlyAllowHeaders: false,
-            shouldCausePreflight: false,
-            description: "Accept header with normal value SHOULD NOT cause a preflight"
-        }
-        ,{
-            headersToAdd: [{ name : "Accept", value: allAllowedNonAlphanumericCharactersForAcceptHeader }],
-            explicitlyAllowHeaders: false,
-            shouldCausePreflight: false,
-            description: "Accept header value with all allowed non-alphanumeric characters SHOULD NOT cause a preflight"
-        }
-        ,{
-            headersToAdd: [{ name : "Accept-Language", value: "en" }],
-            explicitlyAllowHeaders: false,
-            shouldCausePreflight: false,
-            description: "Accept-Language header with normal value SHOULD NOT cause a preflight"
-        }
-        ,{
-            headersToAdd: [{ name : "Accept-Language", value: allAllowedNonAlphanumericCharactersForAcceptAndContentLanguageHeader }],
-            explicitlyAllowHeaders: false,
-            shouldCausePreflight: false,
-            description: "Accept-Language header value with all allowed non-alphanumeric characters SHOULD NOT cause a preflight"
-        }
-        ,{
-            headersToAdd: [{ name : "Content-Language", value: "en" }],
-            explicitlyAllowHeaders: false,
-            shouldCausePreflight: false,
-            description: "Content-Language header with normal value SHOULD NOT cause a preflight"
-        }
-        ,{
-            headersToAdd: [{ name : "Content-Language", value: allAllowedNonAlphanumericCharactersForAcceptAndContentLanguageHeader }],
-            explicitlyAllowHeaders: false,
-            shouldCausePreflight: false,
-            description: "Content-Language header value with all allowed non-alphanumeric characters SHOULD NOT cause a preflight"
-        }
-        // Negative test cases with abnormal headers
-        ,{
-            headersToAdd: [{ name : "Accept", value: abnormalSimpleCorsHeaderValue }],
-            explicitlyAllowHeaders: false,
-            shouldCausePreflight: true,
-            description: "Accept header with abnormal value SHOULD cause a preflight"
-        }
-        ,{
-            headersToAdd: [{ name : "Accept-Language", value: abnormalSimpleCorsHeaderValue }],
-            explicitlyAllowHeaders: false,
-            shouldCausePreflight: true,
-            description: "Accept-Language header with abnormal value SHOULD cause a preflight"
-        }
-        ,{
-            headersToAdd: [{ name : "Content-Language", value: abnormalSimpleCorsHeaderValue }],
-            explicitlyAllowHeaders: false,
-            shouldCausePreflight: true,
-            description: "Content-Language header with abnormal value SHOULD cause a preflight"
-        }
-        ,{
-            headersToAdd: [{ name : "Accept", value: "text/*" }, { name : "Accept-Language", value: "en" }, { name : "Content-Language", value: abnormalSimpleCorsHeaderValue }],
-            explicitlyAllowHeaders: false,
-            shouldCausePreflight: true,
-            description: "Accept header with normal value, Accept-Language header with normal value, and Content-Language header with abnormal value SHOULD cause a preflight"
-        }
-        ,{
-            headersToAdd: [{ name : "Accept", value: "text/*" }, { name : "Accept", value: abnormalSimpleCorsHeaderValue }],
-            explicitlyAllowHeaders: false,
-            shouldCausePreflight: true,
-            description: "Accept header with normal value and then another Accept header with abnormal value SHOULD cause a preflight"
-        }
-        // Positive test cases with abnormal headers
-        ,{
-            headersToAdd: [{ name : "Accept", value: abnormalSimpleCorsHeaderValue }],
-            explicitlyAllowHeaders: true,
-            shouldCausePreflight: true,
-            description: "Accept header with abnormal value and explicitly allowed headers SHOULD be allowed"
-        }
-        ,{
-            headersToAdd: [{ name : "Content-Language", value: abnormalSimpleCorsHeaderValue }],
-            explicitlyAllowHeaders: true,
-            shouldCausePreflight: true,
-            description: "Content-Language header with abnormal value and explicitly allowed headers SHOULD be allowed"
-        }
-        ,{
-            headersToAdd: [{ name : "Accept", value: "text/*" }, { name : "Accept-Language", value: "en" }, { name : "Content-Language", value: abnormalSimpleCorsHeaderValue }],
-            explicitlyAllowHeaders: true,
-            shouldCausePreflight: true,
-            description: "Accept header with normal value, Accept-Language header with normal value, Content-Language header with abnormal value, and explicitly allowed headers SHOULD be allowed"
-        }
-        ,{
-            headersToAdd: [{ name : "Accept", value: "text/*" }, { name : "Accept", value: abnormalSimpleCorsHeaderValue }],
-            explicitlyAllowHeaders: true,
-            shouldCausePreflight: true,
-            description: "Accept header with normal value, then another Accept header with abnormal value, and explicitly allowed headers SHOULD be allowed"
-        }
-    ];
-
-    function runTestCase(testNumber) {
-        var testCase = testCases[testNumber];
-        xhr = new XMLHttpRequest();
-        xhr.open('GET', url + (testCase.explicitlyAllowHeaders ? "/?explicitlyAllowHeaders=true" : ""), true);
-        for (var i = 0; i < testCase.headersToAdd.length; i++) {
-            xhr.setRequestHeader(testCase.headersToAdd[i].name, testCase.headersToAdd[i].value);
-        }
-        if (testCase.shouldCausePreflight && !testCase.explicitlyAllowHeaders)
-            xhr._onerror_ = createOnErrorHandler(testCase.description, testNumber);
-        else
-            xhr._onreadystatechange_ = createReadyStateHandler(testCase.description, testNumber);
-        xhr.send();
-    }
-
-    function nextStep (testNumber) {
-        if (testNumber === (testCases.length - 1)) {
-            if (window.testRunner)
-                testRunner.notifyDone();
-        } else
-            runTestCase(testNumber + 1);
-    }
-
-    runTestCase(0);
-</script>
-</body>
-</html>
\ No newline at end of file

Deleted: tags/Safari-604.1.1/LayoutTests/http/tests/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php (210067 => 210068)


--- tags/Safari-604.1.1/LayoutTests/http/tests/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php	2016-12-21 19:05:00 UTC (rev 210067)
+++ tags/Safari-604.1.1/LayoutTests/http/tests/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php	2016-12-21 19:06:35 UTC (rev 210068)
@@ -1,8 +0,0 @@
-<?php
-header('Access-Control-Allow-Origin: http://127.0.0.1:8000');
-
-if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS' && isset($_GET['explicitlyAllowHeaders'])) {
-    header('Access-Control-Allow-Methods: GET, OPTIONS');
-    header('Access-Control-Allow-Headers: Accept, Accept-Language, Content-Language');
-}
-?>
\ No newline at end of file

Modified: tags/Safari-604.1.1/Source/WebCore/ChangeLog (210067 => 210068)


--- tags/Safari-604.1.1/Source/WebCore/ChangeLog	2016-12-21 19:05:00 UTC (rev 210067)
+++ tags/Safari-604.1.1/Source/WebCore/ChangeLog	2016-12-21 19:06:35 UTC (rev 210068)
@@ -1,5 +1,9 @@
 2016-12-21  Babak Shafiei  <[email protected]>
 
+        Roll out r209261.
+
+2016-12-21  Babak Shafiei  <[email protected]>
+
         Roll out r209510.
 
 2016-12-20  Myles C. Maxfield  <[email protected]>

Modified: tags/Safari-604.1.1/Source/WebCore/loader/CrossOriginAccessControl.cpp (210067 => 210068)


--- tags/Safari-604.1.1/Source/WebCore/loader/CrossOriginAccessControl.cpp	2016-12-21 19:05:00 UTC (rev 210067)
+++ tags/Safari-604.1.1/Source/WebCore/loader/CrossOriginAccessControl.cpp	2016-12-21 19:06:35 UTC (rev 210068)
@@ -45,6 +45,25 @@
     return method == "GET" || method == "HEAD" || method == "POST";
 }
 
+bool isOnAccessControlSimpleRequestHeaderWhitelist(HTTPHeaderName name, const String& value)
+{
+    switch (name) {
+    case HTTPHeaderName::Accept:
+    case HTTPHeaderName::AcceptLanguage:
+    case HTTPHeaderName::ContentLanguage:
+        return true;
+    case HTTPHeaderName::ContentType: {
+        // Preflight is required for MIME types that can not be sent via form submission.
+        String mimeType = extractMIMETypeFromMediaType(value);
+        return equalIgnoringASCIICase(mimeType, "application/x-www-form-urlencoded")
+            || equalIgnoringASCIICase(mimeType, "multipart/form-data")
+            || equalIgnoringASCIICase(mimeType, "text/plain");
+    }
+    default:
+        return false;
+    }
+}
+
 bool isSimpleCrossOriginAccessRequest(const String& method, const HTTPHeaderMap& headerMap)
 {
     if (!isOnAccessControlSimpleRequestMethodWhitelist(method))
@@ -51,7 +70,7 @@
         return false;
 
     for (const auto& header : headerMap) {
-        if (!header.keyAsHTTPHeaderName || !isCrossOriginSafeRequestHeader(header.keyAsHTTPHeaderName.value(), header.value))
+        if (!header.keyAsHTTPHeaderName || !isOnAccessControlSimpleRequestHeaderWhitelist(header.keyAsHTTPHeaderName.value(), header.value))
             return false;
     }
 

Modified: tags/Safari-604.1.1/Source/WebCore/loader/CrossOriginAccessControl.h (210067 => 210068)


--- tags/Safari-604.1.1/Source/WebCore/loader/CrossOriginAccessControl.h	2016-12-21 19:05:00 UTC (rev 210067)
+++ tags/Safari-604.1.1/Source/WebCore/loader/CrossOriginAccessControl.h	2016-12-21 19:06:35 UTC (rev 210068)
@@ -40,6 +40,7 @@
 
 bool isSimpleCrossOriginAccessRequest(const String& method, const HTTPHeaderMap&);
 bool isOnAccessControlSimpleRequestMethodWhitelist(const String&);
+bool isOnAccessControlSimpleRequestHeaderWhitelist(HTTPHeaderName, const String& value);
 bool isOnAccessControlResponseHeaderWhitelist(const String&);
 
 void updateRequestForAccessControl(ResourceRequest&, SecurityOrigin&, StoredCredentials);

Modified: tags/Safari-604.1.1/Source/WebCore/loader/CrossOriginPreflightResultCache.cpp (210067 => 210068)


--- tags/Safari-604.1.1/Source/WebCore/loader/CrossOriginPreflightResultCache.cpp	2016-12-21 19:05:00 UTC (rev 210067)
+++ tags/Safari-604.1.1/Source/WebCore/loader/CrossOriginPreflightResultCache.cpp	2016-12-21 19:06:35 UTC (rev 210068)
@@ -29,7 +29,6 @@
 
 #include "CrossOriginAccessControl.h"
 #include "HTTPHeaderNames.h"
-#include "HTTPParsers.h"
 #include "ResourceResponse.h"
 #include <wtf/MainThread.h>
 #include <wtf/NeverDestroyed.h>
@@ -128,7 +127,7 @@
 bool CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders(const HTTPHeaderMap& requestHeaders, String& errorDescription) const
 {
     for (const auto& header : requestHeaders) {
-        if (header.keyAsHTTPHeaderName && isCrossOriginSafeRequestHeader(header.keyAsHTTPHeaderName.value(), header.value))
+        if (header.keyAsHTTPHeaderName && isOnAccessControlSimpleRequestHeaderWhitelist(header.keyAsHTTPHeaderName.value(), header.value))
             continue;
         if (!m_headers.contains(header.key)) {
             errorDescription = "Request header field " + header.key + " is not allowed by Access-Control-Allow-Headers.";

Modified: tags/Safari-604.1.1/Source/WebCore/platform/network/HTTPParsers.cpp (210067 => 210068)


--- tags/Safari-604.1.1/Source/WebCore/platform/network/HTTPParsers.cpp	2016-12-21 19:05:00 UTC (rev 210067)
+++ tags/Safari-604.1.1/Source/WebCore/platform/network/HTTPParsers.cpp	2016-12-21 19:06:35 UTC (rev 210068)
@@ -34,7 +34,6 @@
 #include "HTTPParsers.h"
 
 #include "HTTPHeaderNames.h"
-#include "Language.h"
 #include <wtf/DateMath.h>
 #include <wtf/NeverDestroyed.h>
 #include <wtf/text/CString.h>
@@ -127,36 +126,6 @@
     return true;
 }
 
-// See RFC 7231, Section 5.3.2
-bool isValidAcceptHeaderValue(const String& value)
-{
-    for (unsigned i = 0; i < value.length(); ++i) {
-        UChar c = value[i];
-        if (isASCIIAlphanumeric(c) || c == ' ' || c == '*' || c == '.' || c == '/' || c == ';' || c == '=')
-            continue;
-        return false;
-    }
-    
-    return true;
-}
-
-// See RFC 7231, Section 5.3.5 and 3.1.3.2
-bool isValidLanguageHeaderValue(const String& value)
-{
-    for (unsigned i = 0; i < value.length(); ++i) {
-        UChar c = value[i];
-        if (isASCIIAlphanumeric(c) || c == ' ' || c == '*' || c == '-' || c == '.' || c == ';' || c == '=')
-            continue;
-        return false;
-    }
-    
-    // FIXME: Validate further by splitting into language tags and optional quality
-    // values (q=) and then check each language tag.
-    // Language tags https://tools.ietf.org/html/rfc7231#section-3.1.3.1
-    // Language tag syntax https://tools.ietf.org/html/bcp47#section-2.1
-    return true;
-}
-
 // See RFC 7230, Section 3.2.6.
 bool isValidHTTPToken(const String& value)
 {
@@ -763,7 +732,7 @@
     }
 }
 
-// Implementation of https://fetch.spec.whatwg.org/#cors-safelisted-response-header-name
+// Implememtnation of https://fetch.spec.whatwg.org/#cors-safelisted-response-header-name
 bool isForbiddenHeaderName(const String& name)
 {
     HTTPHeaderName headerName;
@@ -807,7 +776,18 @@
     HTTPHeaderName headerName;
     if (!findHTTPHeaderName(name, headerName))
         return false;
-    return isCrossOriginSafeRequestHeader(headerName, value);
+    switch (headerName) {
+    case HTTPHeaderName::Accept:
+    case HTTPHeaderName::AcceptLanguage:
+    case HTTPHeaderName::ContentLanguage:
+        return true;
+    case HTTPHeaderName::ContentType: {
+        String mimeType = extractMIMETypeFromMediaType(value);
+        return equalLettersIgnoringASCIICase(mimeType, "application/x-www-form-urlencoded") || equalLettersIgnoringASCIICase(mimeType, "multipart/form-data") || equalLettersIgnoringASCIICase(mimeType, "text/plain");
+    }
+    default:
+        return false;
+    }
 }
 
 bool isCrossOriginSafeHeader(HTTPHeaderName name, const HTTPHeaderSet& accessControlExposeHeaderSet)
@@ -844,12 +824,10 @@
 {
     switch (name) {
     case HTTPHeaderName::Accept:
-        return isValidAcceptHeaderValue(value);
     case HTTPHeaderName::AcceptLanguage:
     case HTTPHeaderName::ContentLanguage:
-        return isValidLanguageHeaderValue(value);
+        return true;
     case HTTPHeaderName::ContentType: {
-        // Preflight is required for MIME types that can not be sent via form submission.
         String mimeType = extractMIMETypeFromMediaType(value);
         return equalLettersIgnoringASCIICase(mimeType, "application/x-www-form-urlencoded") || equalLettersIgnoringASCIICase(mimeType, "multipart/form-data") || equalLettersIgnoringASCIICase(mimeType, "text/plain");
     }

Modified: tags/Safari-604.1.1/Source/WebCore/platform/network/HTTPParsers.h (210067 => 210068)


--- tags/Safari-604.1.1/Source/WebCore/platform/network/HTTPParsers.h	2016-12-21 19:05:00 UTC (rev 210067)
+++ tags/Safari-604.1.1/Source/WebCore/platform/network/HTTPParsers.h	2016-12-21 19:06:35 UTC (rev 210068)
@@ -69,8 +69,6 @@
 
 bool isValidReasonPhrase(const String&);
 bool isValidHTTPHeaderValue(const String&);
-bool isValidAcceptHeaderValue(const String&);
-bool isValidLanguageHeaderValue(const String&);
 bool isValidHTTPToken(const String&);
 bool parseHTTPRefresh(const String& refresh, double& delay, String& url);
 std::optional<std::chrono::system_clock::time_point> parseHTTPDate(const String&);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to