| Index: chrome/browser/ui/webui/extensions/extension_error_handler.cc
|
| diff --git a/chrome/browser/ui/webui/extensions/extension_error_handler.cc b/chrome/browser/ui/webui/extensions/extension_error_handler.cc
|
| index 45bd71f99cbc1141ac5ede960ef9abddde2edea7..f89feb4bdcf84f3d004c0a3fa069b2a3e39fe0d7 100644
|
| --- a/chrome/browser/ui/webui/extensions/extension_error_handler.cc
|
| +++ b/chrome/browser/ui/webui/extensions/extension_error_handler.cc
|
| @@ -90,11 +90,11 @@ void ExtensionErrorHandler::HandleRequestFileSource(
|
|
|
| // Three required arguments: extension_id, path_suffix, and error_message.
|
| std::string extension_id;
|
| - base::FilePath::StringType path_suffix;
|
| + base::FilePath::StringType path_suffix_string;
|
| base::string16 error_message;
|
|
|
| if (!args->GetDictionary(0, &dict) ||
|
| - !dict->GetString(kPathSuffixKey, &path_suffix) ||
|
| + !dict->GetString(kPathSuffixKey, &path_suffix_string) ||
|
| !dict->GetString(ExtensionError::kExtensionIdKey, &extension_id) ||
|
| !dict->GetString(ExtensionError::kMessageKey, &error_message)) {
|
| NOTREACHED();
|
| @@ -105,6 +105,13 @@ void ExtensionErrorHandler::HandleRequestFileSource(
|
| ExtensionSystem::Get(Profile::FromWebUI(web_ui()))->
|
| extension_service()->GetExtensionById(extension_id,
|
| true /* include disabled */ );
|
| +
|
| + // Under no circumstances should we ever need to reference a file outside of
|
| + // the extension's directory. If it tries to, abort.
|
| + base::FilePath path_suffix(path_suffix_string);
|
| + if (path_suffix.ReferencesParent())
|
| + return;
|
| +
|
| base::FilePath path = extension->path().Append(path_suffix);
|
|
|
| // Setting the title and the error message is the same for all file types.
|
| @@ -118,7 +125,7 @@ void ExtensionErrorHandler::HandleRequestFileSource(
|
| base::Closure closure;
|
| std::string* contents = NULL;
|
|
|
| - if (path_suffix == kManifestFilename) {
|
| + if (path_suffix_string == kManifestFilename) {
|
| std::string manifest_key;
|
| if (!dict->GetString(ManifestError::kManifestKeyKey, &manifest_key)) {
|
| NOTREACHED();
|
|
|