Index: chrome/browser/extensions/extension_management_internal.cc |
diff --git a/chrome/browser/extensions/extension_management_internal.cc b/chrome/browser/extensions/extension_management_internal.cc |
index a2596ae6f4a73d2a9c4772dece0dfeb2c26e2e63..cab0415bc77a91f294e7a2f86f56377592838e5d 100644 |
--- a/chrome/browser/extensions/extension_management_internal.cc |
+++ b/chrome/browser/extensions/extension_management_internal.cc |
@@ -115,6 +115,14 @@ bool IndividualSettings::Parse(const base::DictionaryValue* dict, |
// Get the list of URLPatterns. |
if (dict->GetListWithoutPathExpansion(key, |
&host_list_value)) { |
+ if (host_list_value->GetSize() > |
+ schema_constants::kMaxItemsURLPatternSet) { |
+ LOG(WARNING) << "Exceeded maximum number of URL match patterns (" |
+ << schema_constants::kMaxItemsURLPatternSet |
+ << ") for attribute '" << key << "'"; |
+ return false; |
+ } |
+ |
out_value->ClearPatterns(); |
const int extension_scheme_mask = |
URLPattern::GetValidSchemeMaskForExtensions(); |
@@ -122,7 +130,8 @@ bool IndividualSettings::Parse(const base::DictionaryValue* dict, |
std::string unparsed_str; |
host_list_value->GetString(i, &unparsed_str); |
URLPattern pattern = URLPattern(extension_scheme_mask); |
- URLPattern::ParseResult parse_result = pattern.Parse(unparsed_str); |
+ URLPattern::ParseResult parse_result = pattern.Parse( |
+ unparsed_str, URLPattern::ALLOW_WILDCARD_FOR_EFFECTIVE_TLD); |
if (parse_result != URLPattern::PARSE_SUCCESS) { |
LOG(WARNING) << kMalformedPreferenceWarning; |
LOG(WARNING) << "Invalid URL pattern '" + unparsed_str + |