summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/extensions/extension_protocols.cc10
-rw-r--r--chrome/browser/extensions/extension_protocols_unittest.cc6
2 files changed, 5 insertions, 11 deletions
diff --git a/chrome/browser/extensions/extension_protocols.cc b/chrome/browser/extensions/extension_protocols.cc
index d09cdd1..8f6957d 100644
--- a/chrome/browser/extensions/extension_protocols.cc
+++ b/chrome/browser/extensions/extension_protocols.cc
@@ -40,12 +40,12 @@ FilePath GetPathForExtensionResource(const FilePath& extension_path,
if (!net::FileURLToFilePath(file_url, &ret_val))
return FilePath();
- if (!file_util::AbsolutePath(&ret_val))
- return FilePath();
-
// Double-check that the path we ended up with is actually inside the
- // extension root.
- if (!extension_path.Contains(ret_val))
+ // extension root. We can do this with a simple prefix match because:
+ // a) We control the prefix on both sides, and they should match.
+ // b) GURL normalizes things like "../" and "//" before it gets to us.
+ if (ret_val.value().find(extension_path.value() +
+ FilePath::kSeparators[0]) != 0)
return FilePath();
return ret_val;
diff --git a/chrome/browser/extensions/extension_protocols_unittest.cc b/chrome/browser/extensions/extension_protocols_unittest.cc
index 113b480..dee70a8 100644
--- a/chrome/browser/extensions/extension_protocols_unittest.cc
+++ b/chrome/browser/extensions/extension_protocols_unittest.cc
@@ -15,12 +15,8 @@ TEST(ExtensionProtocolsTest, GetPathForExtensionResource) {
GetPathForExtensionResource(extension_path, "/foo/bar.gif").value());
EXPECT_EQ(std::wstring(L"C:\\myextension\\"),
GetPathForExtensionResource(extension_path, "/").value());
- // TODO(aa): This one is a bit weird, but is what net::FileURLToFilePath()
- // returns for this input. Investigate adding more validation.
EXPECT_EQ(std::wstring(L"C:\\myextension\\c:\\foo.gif"),
GetPathForExtensionResource(extension_path, "/c:/foo.gif").value());
- EXPECT_EQ(std::wstring(L"C:\\myextension\\foo.gif"),
- GetPathForExtensionResource(extension_path, "//foo.gif").value());
EXPECT_EQ(std::wstring(L""),
GetPathForExtensionResource(extension_path, "/../foo.gif").value());
#else
@@ -29,8 +25,6 @@ TEST(ExtensionProtocolsTest, GetPathForExtensionResource) {
GetPathForExtensionResource(extension_path, "/foo/bar.gif").value());
EXPECT_EQ(std::wstring("/myextension/"),
GetPathForExtensionResource(extension_path, "/").value());
- EXPECT_EQ(std::wstring("/myextension/foo.gif"),
- GetPathForExtensionResource(extension_path, "//foo.gif").value());
EXPECT_EQ(std::wstring(""),
GetPathForExtensionResource(extension_path, "/../foo.gif").value());
#endif