Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8405)

Unified Diff: chrome/common/extensions/manifest_handlers/settings_overrides_handler.cc

Issue 71303009: Fix browser crash when parsing invalid Settings Override extension (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/manifest_handlers/settings_overrides_handler.cc
diff --git a/chrome/common/extensions/manifest_handlers/settings_overrides_handler.cc b/chrome/common/extensions/manifest_handlers/settings_overrides_handler.cc
index c71a1c32c1b3ce44fc4332dadda3559a9e99251a..508bdf6859bba225512816e224fca6e47babf66f 100644
--- a/chrome/common/extensions/manifest_handlers/settings_overrides_handler.cc
+++ b/chrome/common/extensions/manifest_handlers/settings_overrides_handler.cc
@@ -62,6 +62,26 @@ std::vector<GURL> ParseStartupPage(const ChromeSettingsOverrides& overrides,
return urls;
}
+scoped_ptr<ChromeSettingsOverrides::Search_provider> ParseSearchEngine(
+ ChromeSettingsOverrides* overrides,
+ string16* error) {
+ if (!overrides->search_provider)
+ return scoped_ptr<ChromeSettingsOverrides::Search_provider>();
+ if (!CreateManifestURL(overrides->search_provider->favicon_url)) {
+ *error = extensions::ErrorUtils::FormatErrorMessageUTF16(
+ manifest_errors::kInvalidSearchEngineURL,
+ overrides->search_provider->favicon_url);
+ return scoped_ptr<ChromeSettingsOverrides::Search_provider>();
+ }
+ if (!CreateManifestURL(overrides->search_provider->search_url)) {
+ *error = extensions::ErrorUtils::FormatErrorMessageUTF16(
+ manifest_errors::kInvalidSearchEngineURL,
+ overrides->search_provider->search_url);
+ return scoped_ptr<ChromeSettingsOverrides::Search_provider>();
+ }
+ return overrides->search_provider.Pass();
+}
+
// A www. prefix is not informative and thus not worth the limited real estate
// in the permissions UI.
std::string RemoveWwwPrefix(const std::string& url) {
@@ -96,7 +116,7 @@ bool SettingsOverridesHandler::Parse(Extension* extension, string16* error) {
scoped_ptr<SettingsOverrides> info(new SettingsOverrides);
info->homepage = ParseHomepage(*settings, error);
- info->search_engine = settings->search_provider.Pass();
+ info->search_engine = ParseSearchEngine(settings.get(), error);
info->startup_pages = ParseStartupPage(*settings, error);
if (!info->homepage && !info->search_engine && info->startup_pages.empty()) {
*error = ASCIIToUTF16(manifest_errors::kInvalidEmptySettingsOverrides);

Powered by Google App Engine
This is Rietveld 408576698