summaryrefslogtreecommitdiffstats
path: root/chrome/browser/geolocation/geolocation_content_settings_map.cc
diff options
context:
space:
mode:
authorjoth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-08 12:54:02 +0000
committerjoth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-08 12:54:02 +0000
commit0c3babbf585fae34cc9baa51240d1ee5182f13ee (patch)
treeb8cb701e6b3a2aa1c35e11b07e709760ca94c6fe /chrome/browser/geolocation/geolocation_content_settings_map.cc
parentfd82df933e07715860a30fec05be87b8279f4051 (diff)
downloadchromium_src-0c3babbf585fae34cc9baa51240d1ee5182f13ee.zip
chromium_src-0c3babbf585fae34cc9baa51240d1ee5182f13ee.tar.gz
chromium_src-0c3babbf585fae34cc9baa51240d1ee5182f13ee.tar.bz2
Make the prefs reading more robust to poorly formed URLs
BUG=39685 TEST=GeolocationContentSettingsMapTests.IgnoreInvalidURLsInPrefs Review URL: http://codereview.chromium.org/1566027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43945 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/geolocation/geolocation_content_settings_map.cc')
-rwxr-xr-xchrome/browser/geolocation/geolocation_content_settings_map.cc13
1 files changed, 10 insertions, 3 deletions
diff --git a/chrome/browser/geolocation/geolocation_content_settings_map.cc b/chrome/browser/geolocation/geolocation_content_settings_map.cc
index 7d01713..7bae5d2 100755
--- a/chrome/browser/geolocation/geolocation_content_settings_map.cc
+++ b/chrome/browser/geolocation/geolocation_content_settings_map.cc
@@ -232,8 +232,11 @@ void GeolocationContentSettingsMap::ReadExceptions() {
bool found = all_settings_dictionary->GetDictionaryWithoutPathExpansion(
wide_origin, &requesting_origin_settings_dictionary);
DCHECK(found);
+ GURL origin_as_url(WideToUTF8(wide_origin));
+ if (!origin_as_url.is_valid())
+ continue;
OneOriginSettings* requesting_origin_settings =
- &content_settings_[GURL(WideToUTF8(wide_origin))];
+ &content_settings_[origin_as_url];
GetOneOriginSettingsFromDictionary(
requesting_origin_settings_dictionary,
requesting_origin_settings);
@@ -251,7 +254,11 @@ void GeolocationContentSettingsMap::GetOneOriginSettingsFromDictionary(
int setting = kDefaultSetting;
bool found = dictionary->GetIntegerWithoutPathExpansion(target, &setting);
DCHECK(found);
- (*one_origin_settings)[GURL(WideToUTF8(target))] =
- IntToContentSetting(setting);
+ GURL target_url(WideToUTF8(target));
+ // An empty URL has a special meaning (wildcard), so only accept invalid
+ // URLs if the original version was empty (avoids treating corrupted prefs
+ // as the wildcard entry; see http://crbug.com/39685)
+ if (target_url.is_valid() || target.empty())
+ (*one_origin_settings)[target_url] = IntToContentSetting(setting);
}
}