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\"]}}]", { });