| Index: chrome/common/extensions/extension.cc
|
| diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
|
| index 1b3e947a1b50a4fadc104b8175c0f88978ceaca4..eefbabeaeedfce22d5e247d9c00222cbd95f7894 100644
|
| --- a/chrome/common/extensions/extension.cc
|
| +++ b/chrome/common/extensions/extension.cc
|
| @@ -130,6 +130,19 @@ static void ConvertHexadecimalToIDAlphabet(std::string* id) {
|
| }
|
| }
|
|
|
| +// Strips leading slashes from the file path. Returns true iff the final path is
|
| +// non empty.
|
| +bool NormalizeAndValidatePath(std::string* path) {
|
| + size_t first_non_slash = path->find_first_not_of('/');
|
| + if (first_non_slash == std::string::npos) {
|
| + *path = "";
|
| + return false;
|
| + }
|
| +
|
| + *path = path->substr(first_non_slash);
|
| + return true;
|
| +}
|
| +
|
| // Loads icon paths defined in dictionary |icons_value| into ExtensionIconSet
|
| // |icons|. |icons_value| is a dictionary value {icon size -> icon path}. Icons
|
| // in |icons_value| whose size is not in |icon_sizes| will be ignored.
|
| @@ -150,14 +163,12 @@ bool LoadIconsFromDictionary(const DictionaryValue* icons_value,
|
| return false;
|
| }
|
|
|
| - if (!icon_path.empty() && icon_path[0] == '/')
|
| - icon_path = icon_path.substr(1);
|
| -
|
| - if (icon_path.empty()) {
|
| + if (!NormalizeAndValidatePath(&icon_path)) {
|
| *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
|
| errors::kInvalidIconPath, key);
|
| return false;
|
| }
|
| +
|
| icons->Add(icon_sizes[i], icon_path);
|
| }
|
| }
|
| @@ -852,7 +863,7 @@ scoped_ptr<ExtensionAction> Extension::LoadExtensionActionHelper(
|
| for (ListValue::const_iterator iter = icons->begin();
|
| iter != icons->end(); ++iter) {
|
| std::string path;
|
| - if (!(*iter)->GetAsString(&path) || path.empty()) {
|
| + if (!(*iter)->GetAsString(&path) || !NormalizeAndValidatePath(&path)) {
|
| *error = ASCIIToUTF16(errors::kInvalidPageActionIconPath);
|
| return scoped_ptr<ExtensionAction>();
|
| }
|
| @@ -894,7 +905,7 @@ scoped_ptr<ExtensionAction> Extension::LoadExtensionActionHelper(
|
| result->set_default_icon(default_icons.Pass());
|
| } else if (extension_action->GetString(keys::kPageActionDefaultIcon,
|
| &default_icon) &&
|
| - !default_icon.empty()) {
|
| + NormalizeAndValidatePath(&default_icon)) {
|
| scoped_ptr<ExtensionIconSet> icon_set(new ExtensionIconSet);
|
| icon_set->Add(extension_misc::EXTENSION_ICON_ACTION, default_icon);
|
| result->set_default_icon(icon_set.Pass());
|
| @@ -2417,9 +2428,8 @@ bool Extension::LoadScriptBadge(string16* error) {
|
| for (size_t i = 0; i < extension_misc::kNumScriptBadgeIconSizes; i++) {
|
| std::string path = icons().Get(extension_misc::kScriptBadgeIconSizes[i],
|
| ExtensionIconSet::MATCH_EXACTLY);
|
| - if (!path.empty()) {
|
| + if (!path.empty())
|
| icon_set->Add(extension_misc::kScriptBadgeIconSizes[i], path);
|
| - }
|
| }
|
|
|
| if (!icon_set->map().empty()) {
|
|
|