| Index: chrome/common/extensions/extension.cc
|
| diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
|
| index a31d0b791c96d405fff679339506bb5cc536d5a7..85b313ffb49a4db4ecd46ab58283ad11a2fba70e 100644
|
| --- a/chrome/common/extensions/extension.cc
|
| +++ b/chrome/common/extensions/extension.cc
|
| @@ -835,16 +835,24 @@ FileBrowserHandler* Extension::LoadFileBrowserHandler(
|
| return NULL;
|
| }
|
| StringToLowerASCII(&filter);
|
| + if (filter.substr(0, 10) != chrome::kFileSystemScheme ||
|
| + filter[10] != ':') {
|
| + *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
|
| + errors::kInvalidURLPatternError, filter);
|
| + return NULL;
|
| + }
|
| + filter.replace(11, 0, "chrome-extension://*/");
|
| URLPattern pattern(URLPattern::SCHEME_FILESYSTEM);
|
| + pattern.SetValidInnerSchemes(URLPattern::SCHEME_EXTENSION);
|
| if (pattern.Parse(filter) != URLPattern::PARSE_SUCCESS) {
|
| *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
|
| errors::kInvalidURLPatternError, filter);
|
| return NULL;
|
| }
|
| std::string path = pattern.path();
|
| - bool allowed = path == "*" || path == "*.*" ||
|
| - (path.compare(0, 2, "*.") == 0 &&
|
| - path.find_first_of('*', 2) == std::string::npos);
|
| + bool allowed = path == "/*" || path == "/*.*" ||
|
| + (path.compare(0, 3, "/*.") == 0 &&
|
| + path.find_first_of('*', 3) == std::string::npos);
|
| if (!allowed) {
|
| *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
|
| errors::kInvalidURLPatternError, filter);
|
|
|