diff options
author | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-08 12:54:02 +0000 |
---|---|---|
committer | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-08 12:54:02 +0000 |
commit | 0c3babbf585fae34cc9baa51240d1ee5182f13ee (patch) | |
tree | b8cb701e6b3a2aa1c35e11b07e709760ca94c6fe /chrome/browser/geolocation/geolocation_content_settings_map.cc | |
parent | fd82df933e07715860a30fec05be87b8279f4051 (diff) | |
download | chromium_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-x | chrome/browser/geolocation/geolocation_content_settings_map.cc | 13 |
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); } } |