summaryrefslogtreecommitdiffstats
path: root/webkit/fileapi
diff options
context:
space:
mode:
authorericu@google.com <ericu@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-28 01:21:30 +0000
committerericu@google.com <ericu@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-28 01:21:30 +0000
commit24099a743011d05a0077df37a3e9a1b13f62ff1a (patch)
tree70ef06c7496e6fc67116c56c5bebf4bf1fd2b9da /webkit/fileapi
parent054702d224472e01faf94482e2219ff1cd2b1aa7 (diff)
downloadchromium_src-24099a743011d05a0077df37a3e9a1b13f62ff1a.zip
chromium_src-24099a743011d05a0077df37a3e9a1b13f62ff1a.tar.gz
chromium_src-24099a743011d05a0077df37a3e9a1b13f62ff1a.tar.bz2
Remove old filesystem naming restrictions, as per the new spec.
I retain backslash as illegal, as it's currently a real pain to support. BUG=none TEST=unit tests Review URL: http://codereview.chromium.org/7084008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@87131 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/fileapi')
-rw-r--r--webkit/fileapi/file_system_path_manager_unittest.cc102
-rw-r--r--webkit/fileapi/sandbox_mount_point_provider.cc13
2 files changed, 65 insertions, 50 deletions
diff --git a/webkit/fileapi/file_system_path_manager_unittest.cc b/webkit/fileapi/file_system_path_manager_unittest.cc
index cfdd5ca..122487e 100644
--- a/webkit/fileapi/file_system_path_manager_unittest.cc
+++ b/webkit/fileapi/file_system_path_manager_unittest.cc
@@ -107,21 +107,24 @@ const struct IsRestrictedNameTest {
FilePath::StringType name;
bool expected_dangerous;
} kIsRestrictedNameTestCases[] = {
- // Name that has restricted names in it.
- { FILE_PATH_LITERAL("con"), true, },
- { FILE_PATH_LITERAL("Con.txt"), true, },
- { FILE_PATH_LITERAL("Prn.png"), true, },
- { FILE_PATH_LITERAL("AUX"), true, },
- { FILE_PATH_LITERAL("nUl."), true, },
- { FILE_PATH_LITERAL("coM1"), true, },
- { FILE_PATH_LITERAL("COM3.com"), true, },
- { FILE_PATH_LITERAL("cOM7"), true, },
- { FILE_PATH_LITERAL("com9"), true, },
- { FILE_PATH_LITERAL("lpT1"), true, },
- { FILE_PATH_LITERAL("LPT4.com"), true, },
- { FILE_PATH_LITERAL("lPT8"), true, },
- { FILE_PATH_LITERAL("lPT9"), true, },
- // Similar but safe cases.
+
+ // Names that contain strings that used to be restricted, but are now allowed.
+ { FILE_PATH_LITERAL("con"), false, },
+ { FILE_PATH_LITERAL("Con.txt"), false, },
+ { FILE_PATH_LITERAL("Prn.png"), false, },
+ { FILE_PATH_LITERAL("AUX"), false, },
+ { FILE_PATH_LITERAL("nUl."), false, },
+ { FILE_PATH_LITERAL("coM1"), false, },
+ { FILE_PATH_LITERAL("COM3.com"), false, },
+ { FILE_PATH_LITERAL("cOM7"), false, },
+ { FILE_PATH_LITERAL("com9"), false, },
+ { FILE_PATH_LITERAL("lpT1"), false, },
+ { FILE_PATH_LITERAL("LPT4.com"), false, },
+ { FILE_PATH_LITERAL("lPT8"), false, },
+ { FILE_PATH_LITERAL("lPT9"), false, },
+ { FILE_PATH_LITERAL("com1."), false, },
+
+ // Similar cases that have always been allowed.
{ FILE_PATH_LITERAL("con3"), false, },
{ FILE_PATH_LITERAL("PrnImage.png"), false, },
{ FILE_PATH_LITERAL("AUXX"), false, },
@@ -131,14 +134,15 @@ const struct IsRestrictedNameTest {
{ FILE_PATH_LITERAL("lpT0"), false, },
{ FILE_PATH_LITERAL("LPT.com"), false, },
- // Ends with period or whitespace.
- { FILE_PATH_LITERAL("b "), true, },
- { FILE_PATH_LITERAL("b\t"), true, },
- { FILE_PATH_LITERAL("b\n"), true, },
- { FILE_PATH_LITERAL("b\r\n"), true, },
- { FILE_PATH_LITERAL("b."), true, },
- { FILE_PATH_LITERAL("b.."), true, },
- // Similar but safe cases.
+ // Ends with period or whitespace--used to be banned, now OK.
+ { FILE_PATH_LITERAL("b "), false, },
+ { FILE_PATH_LITERAL("b\t"), false, },
+ { FILE_PATH_LITERAL("b\n"), false, },
+ { FILE_PATH_LITERAL("b\r\n"), false, },
+ { FILE_PATH_LITERAL("b."), false, },
+ { FILE_PATH_LITERAL("b.."), false, },
+
+ // Similar cases that have always been allowed.
{ FILE_PATH_LITERAL("b c"), false, },
{ FILE_PATH_LITERAL("b\tc"), false, },
{ FILE_PATH_LITERAL("b\nc"), false, },
@@ -148,27 +152,47 @@ const struct IsRestrictedNameTest {
{ FILE_PATH_LITERAL("b..c"), false, },
// Name that has restricted chars in it.
+ { FILE_PATH_LITERAL("\\"), true, },
+ { FILE_PATH_LITERAL("/"), true, },
{ FILE_PATH_LITERAL("a\\b"), true, },
{ FILE_PATH_LITERAL("a/b"), true, },
- { FILE_PATH_LITERAL("a<b"), true, },
- { FILE_PATH_LITERAL("a>b"), true, },
- { FILE_PATH_LITERAL("a:b"), true, },
- { FILE_PATH_LITERAL("a?b"), true, },
- { FILE_PATH_LITERAL("a|b"), true, },
{ FILE_PATH_LITERAL("ab\\"), true, },
- { FILE_PATH_LITERAL("ab/.txt"), true, },
- { FILE_PATH_LITERAL("ab<.txt"), true, },
- { FILE_PATH_LITERAL("ab>.txt"), true, },
- { FILE_PATH_LITERAL("ab:.txt"), true, },
- { FILE_PATH_LITERAL("ab?.txt"), true, },
- { FILE_PATH_LITERAL("ab|.txt"), true, },
+ { FILE_PATH_LITERAL("ab/"), true, },
{ FILE_PATH_LITERAL("\\ab"), true, },
{ FILE_PATH_LITERAL("/ab"), true, },
- { FILE_PATH_LITERAL("<ab"), true, },
- { FILE_PATH_LITERAL(">ab"), true, },
- { FILE_PATH_LITERAL(":ab"), true, },
- { FILE_PATH_LITERAL("?ab"), true, },
- { FILE_PATH_LITERAL("|ab"), true, },
+ { FILE_PATH_LITERAL("ab/.txt"), true, },
+ { FILE_PATH_LITERAL("ab\\.txt"), true, },
+
+ // Names that contain chars that were formerly restricted, now OK.
+ { FILE_PATH_LITERAL("a<b"), false, },
+ { FILE_PATH_LITERAL("a>b"), false, },
+ { FILE_PATH_LITERAL("a:b"), false, },
+ { FILE_PATH_LITERAL("a?b"), false, },
+ { FILE_PATH_LITERAL("a|b"), false, },
+ { FILE_PATH_LITERAL("ab<.txt"), false, },
+ { FILE_PATH_LITERAL("ab>.txt"), false, },
+ { FILE_PATH_LITERAL("ab:.txt"), false, },
+ { FILE_PATH_LITERAL("ab?.txt"), false, },
+ { FILE_PATH_LITERAL("ab|.txt"), false, },
+ { FILE_PATH_LITERAL("<ab"), false, },
+ { FILE_PATH_LITERAL(">ab"), false, },
+ { FILE_PATH_LITERAL(":ab"), false, },
+ { FILE_PATH_LITERAL("?ab"), false, },
+ { FILE_PATH_LITERAL("|ab"), false, },
+
+ // Names that are restricted still.
+ { FILE_PATH_LITERAL(".."), true, },
+ { FILE_PATH_LITERAL("."), true, },
+
+ // Similar but safe cases.
+ { FILE_PATH_LITERAL(" ."), false, },
+ { FILE_PATH_LITERAL(". "), false, },
+ { FILE_PATH_LITERAL(" . "), false, },
+ { FILE_PATH_LITERAL(" .."), false, },
+ { FILE_PATH_LITERAL(".. "), false, },
+ { FILE_PATH_LITERAL(" .. "), false, },
+ { FILE_PATH_LITERAL("b."), false, },
+ { FILE_PATH_LITERAL(".b"), false, },
};
FilePath UTF8ToFilePath(const std::string& str) {
diff --git a/webkit/fileapi/sandbox_mount_point_provider.cc b/webkit/fileapi/sandbox_mount_point_provider.cc
index 2c32d74..ca900ba 100644
--- a/webkit/fileapi/sandbox_mount_point_provider.cc
+++ b/webkit/fileapi/sandbox_mount_point_provider.cc
@@ -38,14 +38,12 @@ static const unsigned kOldFileSystemUniqueDirectoryNameLength =
// Restricted names.
// http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#naming-restrictions
static const char* const kRestrictedNames[] = {
- "con", "prn", "aux", "nul",
- "com1", "com2", "com3", "com4", "com5", "com6", "com7", "com8", "com9",
- "lpt1", "lpt2", "lpt3", "lpt4", "lpt5", "lpt6", "lpt7", "lpt8", "lpt9",
+ ".", "..",
};
// Restricted chars.
static const FilePath::CharType kRestrictedChars[] = {
- '/', '\\', '<', '>', ':', '?', '*', '"', '|',
+ '/', '\\',
};
inline std::string FilePathStringToASCII(
@@ -382,10 +380,6 @@ bool SandboxMountPointProvider::IsRestrictedFileName(const FilePath& filename)
if (filename.value().empty())
return false;
- if (IsWhitespace(filename.value()[filename.value().size() - 1]) ||
- filename.value()[filename.value().size() - 1] == '.')
- return true;
-
std::string filename_lower = StringToLowerASCII(
FilePathStringToASCII(filename.value()));
@@ -393,9 +387,6 @@ bool SandboxMountPointProvider::IsRestrictedFileName(const FilePath& filename)
// Exact match.
if (filename_lower == kRestrictedNames[i])
return true;
- // Starts with "RESTRICTED_NAME.".
- if (filename_lower.find(std::string(kRestrictedNames[i]) + ".") == 0)
- return true;
}
for (size_t i = 0; i < arraysize(kRestrictedChars); ++i) {