Title: [185442] trunk
Revision
185442
Author
achristen...@apple.com
Date
2015-06-10 17:52:22 -0700 (Wed, 10 Jun 2015)

Log Message

Source/WebCore:
[Content Extensions] Limit number of rules.
https://bugs.webkit.org/show_bug.cgi?id=145663
rdar://problem/21242407

Reviewed by Benjamin Poulain.

Added an API test to make sure that parsing fails when there are too many rules.

* contentextensions/ContentExtensionError.cpp:
(WebCore::ContentExtensions::contentExtensionErrorCategory):
* contentextensions/ContentExtensionError.h:
* contentextensions/ContentExtensionParser.cpp:
(WebCore::ContentExtensions::loadEncodedRules):
Fail to parse a content extension with more than 50000 rules.

Tools:
[Content Extensions] Make max NFA size and max rule count user defaults.
https://bugs.webkit.org/show_bug.cgi?id=145663
rdar://problem/21242407

Reviewed by Benjamin Poulain.

* TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
(TestWebKitAPI::TEST_F):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (185441 => 185442)


--- trunk/Source/WebCore/ChangeLog	2015-06-11 00:45:39 UTC (rev 185441)
+++ trunk/Source/WebCore/ChangeLog	2015-06-11 00:52:22 UTC (rev 185442)
@@ -1,3 +1,20 @@
+2015-06-10  Alex Christensen  <achristen...@webkit.org>
+
+        [Content Extensions] Limit number of rules.
+        https://bugs.webkit.org/show_bug.cgi?id=145663
+        rdar://problem/21242407
+
+        Reviewed by Benjamin Poulain.
+
+        Added an API test to make sure that parsing fails when there are too many rules.
+
+        * contentextensions/ContentExtensionError.cpp:
+        (WebCore::ContentExtensions::contentExtensionErrorCategory):
+        * contentextensions/ContentExtensionError.h:
+        * contentextensions/ContentExtensionParser.cpp:
+        (WebCore::ContentExtensions::loadEncodedRules):
+        Fail to parse a content extension with more than 50000 rules.
+
 2015-06-10  Said Abou-Hallawa  <sabouhall...@apple.com>
 
         REGRESSION (r184895): Vertical border elements ([-webkit]-border-image set to 'repeat') that used to render perfectly are now rendering incorrectly.

Modified: trunk/Source/WebCore/contentextensions/ContentExtensionError.cpp (185441 => 185442)


--- trunk/Source/WebCore/contentextensions/ContentExtensionError.cpp	2015-06-11 00:45:39 UTC (rev 185441)
+++ trunk/Source/WebCore/contentextensions/ContentExtensionError.cpp	2015-06-11 00:52:22 UTC (rev 185442)
@@ -77,6 +77,8 @@
                 return "Invalid or unsupported regular _expression_.";
             case ContentExtensionError::JSONInvalidDomainList:
                 return "Invalid domain list.";
+            case ContentExtensionError::JSONTooManyRules:
+                return "Too many rules in JSON array.";
             case ContentExtensionError::JSONDomainNotLowerCaseASCII:
                 return "Domains must be lower case ASCII.  Use punycode to encode non-ASCII characters.";
             case ContentExtensionError::JSONUnlessAndIfDomain:

Modified: trunk/Source/WebCore/contentextensions/ContentExtensionError.h (185441 => 185442)


--- trunk/Source/WebCore/contentextensions/ContentExtensionError.h	2015-06-11 00:45:39 UTC (rev 185441)
+++ trunk/Source/WebCore/contentextensions/ContentExtensionError.h	2015-06-11 00:52:22 UTC (rev 185442)
@@ -52,6 +52,7 @@
     JSONInvalidDomainList,
     JSONDomainNotLowerCaseASCII,
     JSONUnlessAndIfDomain,
+    JSONTooManyRules,
     
     JSONInvalidAction,
     JSONInvalidActionType,

Modified: trunk/Source/WebCore/contentextensions/ContentExtensionParser.cpp (185441 => 185442)


--- trunk/Source/WebCore/contentextensions/ContentExtensionParser.cpp	2015-06-11 00:45:39 UTC (rev 185441)
+++ trunk/Source/WebCore/contentextensions/ContentExtensionParser.cpp	2015-06-11 00:52:22 UTC (rev 185442)
@@ -239,6 +239,9 @@
     Vector<ContentExtensionRule> localRuleList;
 
     unsigned length = topLevelArray->length();
+    const unsigned maxRuleCount = 50000;
+    if (length > maxRuleCount)
+        return ContentExtensionError::JSONTooManyRules;
     for (unsigned i = 0; i < length; ++i) {
         JSValue value = topLevelArray->getIndex(&exec, i);
         if (exec.hadException() || !value)

Modified: trunk/Tools/ChangeLog (185441 => 185442)


--- trunk/Tools/ChangeLog	2015-06-11 00:45:39 UTC (rev 185441)
+++ trunk/Tools/ChangeLog	2015-06-11 00:52:22 UTC (rev 185442)
@@ -1,3 +1,14 @@
+2015-06-10  Alex Christensen  <achristen...@webkit.org>
+
+        [Content Extensions] Make max NFA size and max rule count user defaults.
+        https://bugs.webkit.org/show_bug.cgi?id=145663
+        rdar://problem/21242407
+
+        Reviewed by Benjamin Poulain.
+
+        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
+        (TestWebKitAPI::TEST_F):
+
 2015-06-10  Hyungwook Lee  <hyungwook....@navercorp.com>
 
         [EFL] Execute _javascript_ method in mini browser address bar.

Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp (185441 => 185442)


--- trunk/Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp	2015-06-11 00:45:39 UTC (rev 185441)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp	2015-06-11 00:52:22 UTC (rev 185442)
@@ -812,6 +812,15 @@
     checkCompilerError("[{\"action\":{\"type\":\"block\"},\"trigger\":{\"url-filter\":\"webkit.org\",\"resource-type\":[5]}}]",
         ContentExtensions::ContentExtensionError::JSONInvalidStringInTriggerFlagsArray);
     
+    StringBuilder rules;
+    rules.append("[");
+    for (unsigned i = 1; i < 50000; ++i)
+        rules.append("{\"action\":{\"type\":\"block\"},\"trigger\":{\"url-filter\":\"a\"}},");
+    String rules50000 = rules.toString() + "{\"action\":{\"type\":\"block\"},\"trigger\":{\"url-filter\":\"a\"}}]";
+    String rules50001 = rules.toString() + "{\"action\":{\"type\":\"block\"},\"trigger\":{\"url-filter\":\"a\"}},{\"action\":{\"type\":\"block\"},\"trigger\":{\"url-filter\":\"a\"}}]";
+    checkCompilerError(rules50000.utf8().data(), { });
+    checkCompilerError(rules50001.utf8().data(), ContentExtensions::ContentExtensionError::JSONTooManyRules);
+    
     checkCompilerError("[{\"action\":{\"type\":\"block\"},\"trigger\":{\"url-filter\":\"webkit.org\",\"if-domain\":{}}}]", ContentExtensions::ContentExtensionError::JSONInvalidDomainList);
     checkCompilerError("[{\"action\":{\"type\":\"block\"},\"trigger\":{\"url-filter\":\"webkit.org\",\"if-domain\":[5]}}]", ContentExtensions::ContentExtensionError::JSONInvalidDomainList);
     checkCompilerError("[{\"action\":{\"type\":\"block\"},\"trigger\":{\"url-filter\":\"webkit.org\",\"if-domain\":[\"a\"]}}]", { });
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to