Changeset 103516 in webkit
- Timestamp:
- Dec 22, 2011 3:03:29 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r103514 r103516 1 2011-12-22 Eric Uhrhane <ericu@chromium.org> 2 3 [filesystem] Remove old filesystem naming restrictions 4 https://bugs.webkit.org/show_bug.cgi?id=62813 5 6 Reviewed by David Levin. 7 8 Replace strict restrictions with minimal safety [no files named "." or 9 "..", no use of '\\' or '\0' in paths, no use of '/' in file names]. 10 Update various tests to ensure that lots of old banned names/paths are 11 now legal, but make sure the remaining restrictions are respected. 12 * fast/filesystem/op-get-entry-expected.txt: 13 * fast/filesystem/op-restricted-chars-expected.txt: 14 * fast/filesystem/op-restricted-names-expected.txt: 15 * fast/filesystem/op-restricted-unicode-expected.txt: 16 * fast/filesystem/resources/op-get-entry.js: 17 (): 18 * fast/filesystem/resources/op-restricted-chars.js: 19 (testCases.tests): 20 (testCases): 21 * fast/filesystem/resources/op-restricted-names.js: 22 (testCases.tests): 23 (testCases): 24 * fast/filesystem/resources/op-restricted-unicode.js: 25 (testCases): 26 1 27 2011-12-22 Nikolas Zimmermann <nzimmermann@rim.com> 2 28 -
trunk/LayoutTests/fast/filesystem/op-get-entry-expected.txt
r79797 r103516 21 21 * Running: CreateNestedWithRelativePath 22 22 PASS Succeeded: "/a".getDirectory("./b") 23 PASS Succeeded: "/a".getDirectory("./...") 23 24 PASS Succeeded: "/a".getDirectory("../b") 24 25 PASS Succeeded: "/a".getDirectory("../../b/c") 25 26 PASS Succeeded: "/a".getDirectory("/a/../../d") 26 27 PASS Succeeded: "/a".getDirectory("/a/../../b/./c/../../../../../e") 27 PASS this.expectedErrorCode + "" is "9"28 PASS this.expectedErrorCode + "" is " 9"28 PASS Succeeded: "/a".getDirectory(".../f") 29 PASS this.expectedErrorCode + "" is "1" 29 30 PASS Succeeded: "/a".getFile("./b.txt") 30 31 PASS Succeeded: "/a".getFile("../b.txt") … … 32 33 PASS Succeeded: "/a".getFile("/a/../../d.txt") 33 34 PASS Succeeded: "/a".getFile("/a/../../b/./c/../../../../../e.txt") 34 PASS this.expectedErrorCode + "" is "9"35 PASS this.expectedErrorCode + "" is " 9"35 PASS Succeeded: "/a".getFile(".../f.txt") 36 PASS this.expectedErrorCode + "" is "1" 36 37 PASS Verified entry: ENTRY {path:/a name:a type:DIRECTORY} 37 38 PASS Verified entry: ENTRY {path:/a/b name:b type:DIRECTORY} -
trunk/LayoutTests/fast/filesystem/op-restricted-chars-expected.txt
r70438 r103516 1 1 * Running: RestrictedChars 2 PASS Succeeded: "/".getFile("a<b") 3 PASS Succeeded: "/".getFile("a>b") 4 PASS Succeeded: "/".getFile("a:b") 5 PASS Succeeded: "/".getFile("a?b") 6 PASS Succeeded: "/".getFile("a*b") 7 PASS Succeeded: "/".getFile("a"b") 8 PASS Succeeded: "/".getFile("a|b") 9 PASS Succeeded: "/".getFile("<ab") 10 PASS Succeeded: "/".getFile(":ab") 11 PASS Succeeded: "/".getFile("?ab") 12 PASS Succeeded: "/".getFile("*ab") 13 PASS Succeeded: "/".getFile(""ab") 14 PASS Succeeded: "/".getFile("|ab") 15 PASS Succeeded: "/".getFile("ab<") 16 PASS Succeeded: "/".getFile("ab:") 17 PASS Succeeded: "/".getFile("ab?") 18 PASS Succeeded: "/".getFile("ab*") 19 PASS Succeeded: "/".getFile("ab"") 20 PASS Succeeded: "/".getFile("ab|") 21 PASS this.expectedErrorCode + "" is "9" 22 PASS Succeeded: "/ab".copyTo("/", " a<b") 23 PASS Succeeded: "/ab".copyTo("/", " a:b") 24 PASS Succeeded: "/ab".copyTo("/", " a?b") 25 PASS Succeeded: "/ab".copyTo("/", " a*b") 26 PASS Succeeded: "/ab".copyTo("/", " a"b") 27 PASS Succeeded: "/ab".copyTo("/", " a|b") 2 28 PASS this.expectedErrorCode + "" is "9" 3 29 PASS this.expectedErrorCode + "" is "9" 4 PASS this.expectedErrorCode + "" is "9" 5 PASS this.expectedErrorCode + "" is "9" 6 PASS this.expectedErrorCode + "" is "9" 7 PASS this.expectedErrorCode + "" is "9" 8 PASS this.expectedErrorCode + "" is "9" 9 PASS this.expectedErrorCode + "" is "9" 10 PASS this.expectedErrorCode + "" is "9" 11 PASS this.expectedErrorCode + "" is "9" 12 PASS this.expectedErrorCode + "" is "9" 13 PASS this.expectedErrorCode + "" is "9" 14 PASS this.expectedErrorCode + "" is "9" 15 PASS this.expectedErrorCode + "" is "9" 16 PASS this.expectedErrorCode + "" is "9" 17 PASS this.expectedErrorCode + "" is "9" 18 PASS this.expectedErrorCode + "" is "9" 19 PASS this.expectedErrorCode + "" is "9" 20 PASS this.expectedErrorCode + "" is "9" 21 PASS this.expectedErrorCode + "" is "9" 22 PASS this.expectedErrorCode + "" is "9" 23 PASS this.expectedErrorCode + "" is "9" 24 PASS Succeeded: "/".getFile("ab") 25 PASS this.expectedErrorCode + "" is "9" 26 PASS this.expectedErrorCode + "" is "9" 27 PASS this.expectedErrorCode + "" is "9" 28 PASS this.expectedErrorCode + "" is "9" 29 PASS this.expectedErrorCode + "" is "9" 30 PASS this.expectedErrorCode + "" is "9" 31 PASS this.expectedErrorCode + "" is "9" 32 PASS this.expectedErrorCode + "" is "9" 33 PASS Verified entry: ENTRY {path:/ab name:ab type:FILE} 30 PASS Verified entry: ENTRY {path:/ab name:ab type:DIRECTORY} 31 PASS Verified entry: ENTRY {path:/a<b name:a<b type:FILE} 32 PASS Verified entry: ENTRY {path:/ a|b name: a|b type:DIRECTORY} 34 33 Finished running tests. 35 34 PASS successfullyParsed is true -
trunk/LayoutTests/fast/filesystem/op-restricted-names-expected.txt
r70438 r103516 1 * Running: RestrictedChars 2 PASS this.expectedErrorCode + "" is "9" 3 PASS this.expectedErrorCode + "" is "9" 4 PASS this.expectedErrorCode + "" is "9" 5 PASS this.expectedErrorCode + "" is "9" 6 PASS this.expectedErrorCode + "" is "9" 7 PASS this.expectedErrorCode + "" is "9" 8 PASS this.expectedErrorCode + "" is "9" 9 PASS this.expectedErrorCode + "" is "9" 10 PASS this.expectedErrorCode + "" is "9" 11 PASS this.expectedErrorCode + "" is "9" 12 PASS this.expectedErrorCode + "" is "9" 13 PASS this.expectedErrorCode + "" is "9" 14 PASS this.expectedErrorCode + "" is "9" 15 PASS this.expectedErrorCode + "" is "9" 16 PASS this.expectedErrorCode + "" is "9" 17 PASS this.expectedErrorCode + "" is "9" 18 PASS this.expectedErrorCode + "" is "9" 19 PASS this.expectedErrorCode + "" is "9" 20 PASS this.expectedErrorCode + "" is "9" 21 PASS this.expectedErrorCode + "" is "9" 22 PASS this.expectedErrorCode + "" is "9" 23 PASS this.expectedErrorCode + "" is "9" 24 PASS this.expectedErrorCode + "" is "9" 25 PASS this.expectedErrorCode + "" is "9" 26 PASS this.expectedErrorCode + "" is "9" 27 PASS this.expectedErrorCode + "" is "9" 28 PASS this.expectedErrorCode + "" is "9" 29 PASS this.expectedErrorCode + "" is "9" 30 PASS this.expectedErrorCode + "" is "9" 31 PASS this.expectedErrorCode + "" is "9" 32 PASS this.expectedErrorCode + "" is "9" 33 PASS this.expectedErrorCode + "" is "9" 34 PASS this.expectedErrorCode + "" is "9" 35 PASS this.expectedErrorCode + "" is "9" 36 PASS this.expectedErrorCode + "" is "9" 37 PASS this.expectedErrorCode + "" is "9" 38 PASS this.expectedErrorCode + "" is "9" 39 PASS this.expectedErrorCode + "" is "9" 40 PASS this.expectedErrorCode + "" is "9" 41 PASS Verified entry: ENTRY {path:/a name:a type:DIRECTORY} 1 * Running: RestrictedNames 2 PASS this.expectedErrorCode + "" is "2" 3 PASS this.expectedErrorCode + "" is "2" 4 PASS Succeeded: "/".getFile("con") 5 PASS Succeeded: "/".getFile("CON") 6 PASS Succeeded: "/".getFile("Con") 7 PASS Succeeded: "/".getFile("cOn.txt") 8 PASS Succeeded: "/".getFile("a/coN") 9 PASS Succeeded: "/".getFile("prn") 10 PASS Succeeded: "/".getFile("PRN") 11 PASS Succeeded: "/".getFile("Prn") 12 PASS Succeeded: "/".getFile("pRn.txt") 13 PASS Succeeded: "/".getFile("a/prN") 14 PASS Succeeded: "/".getFile("aux") 15 PASS Succeeded: "/".getFile("AUX") 16 PASS Succeeded: "/".getFile("Aux") 17 PASS Succeeded: "/".getFile("aUx.txt") 18 PASS Succeeded: "/".getFile("a/auX") 19 PASS Succeeded: "/".getFile("nul") 20 PASS Succeeded: "/".getFile("NUL") 21 PASS Succeeded: "/".getFile("Nul") 22 PASS Succeeded: "/".getFile("nUl.txt") 23 PASS Succeeded: "/".getFile("a/nuL") 24 PASS Succeeded: "/".getFile("com1") 25 PASS Succeeded: "/".getFile("COM2") 26 PASS Succeeded: "/".getFile("Com4") 27 PASS Succeeded: "/".getFile("cOM7.foo") 28 PASS Succeeded: "/".getFile("a/coM9") 29 PASS Succeeded: "/".getFile("lpt1") 30 PASS Succeeded: "/".getFile("LPT2") 31 PASS Succeeded: "/".getFile("Lpt4") 32 PASS Succeeded: "/".getFile("lPT7.foo") 33 PASS Succeeded: "/".getFile("a/lpT9") 34 PASS Succeeded: "/".getFile("foo ") 35 PASS Succeeded: "/".getFile("foo 36 ") 37 PASS Succeeded: "/".getFile("foo.") 38 PASS Succeeded: "/a".copyTo("/", "foo ") 39 PASS Succeeded: "/a".copyTo("/", "foo ") 40 PASS Succeeded: "/a".copyTo("/", "foo..") 41 PASS Succeeded: "/a".moveTo("/", "foo ") 42 PASS Succeeded: "/b".moveTo("/", "foo ") 43 PASS Succeeded: "/c".moveTo("/", "foo.....") 44 PASS Verified entry: ENTRY {path:/foo name:foo type:DIRECTORY} 45 PASS Verified entry: ENTRY {path:/foo name:foo type:DIRECTORY} 46 PASS Verified entry: ENTRY {path:/foo..... name:foo..... type:DIRECTORY} 42 47 Finished running tests. 43 48 PASS successfullyParsed is true -
trunk/LayoutTests/fast/filesystem/op-restricted-unicode-expected.txt
r97541 r103516 2 2 PASS Succeeded: "/".getFile("ab") 3 3 PASS this.expectedErrorCode + "" is "9" 4 PASS this.expectedErrorCode + "" is "9" 5 PASS this.expectedErrorCode + "" is "9" 6 PASS this.expectedErrorCode + "" is "9" 7 PASS this.expectedErrorCode + "" is "9" 8 PASS this.expectedErrorCode + "" is "9" 9 PASS this.expectedErrorCode + "" is "9" 10 PASS this.expectedErrorCode + "" is "9" 11 PASS this.expectedErrorCode + "" is "9" 12 PASS this.expectedErrorCode + "" is "9" 13 PASS this.expectedErrorCode + "" is "9" 14 PASS this.expectedErrorCode + "" is "9" 15 PASS this.expectedErrorCode + "" is "9" 16 PASS this.expectedErrorCode + "" is "9" 17 PASS this.expectedErrorCode + "" is "9" 18 PASS this.expectedErrorCode + "" is "9" 19 PASS this.expectedErrorCode + "" is "9" 20 PASS this.expectedErrorCode + "" is "9" 21 PASS this.expectedErrorCode + "" is "9" 22 PASS this.expectedErrorCode + "" is "9" 23 PASS this.expectedErrorCode + "" is "9" 24 PASS this.expectedErrorCode + "" is "9" 25 PASS this.expectedErrorCode + "" is "9" 26 PASS this.expectedErrorCode + "" is "9" 27 PASS this.expectedErrorCode + "" is "9" 28 PASS this.expectedErrorCode + "" is "9" 29 PASS this.expectedErrorCode + "" is "9" 30 PASS this.expectedErrorCode + "" is "9" 31 PASS this.expectedErrorCode + "" is "9" 32 PASS this.expectedErrorCode + "" is "9" 33 PASS this.expectedErrorCode + "" is "9" 4 PASS Succeeded: "/".getFile("ab") 5 PASS Succeeded: "/".getFile("ab") 6 PASS Succeeded: "/".getFile("ab") 7 PASS Succeeded: "/".getFile("ab") 8 PASS Succeeded: "/".getFile("ab") 9 PASS Succeeded: "/".getFile("ab") 10 PASS Succeeded: "/".getFile("ab") 11 PASS Succeeded: "/".getFile("ab") 12 PASS Succeeded: "/".getFile("a b") 13 PASS Succeeded: "/".getFile("a 14 b") 15 PASS Succeeded: "/".getFile("a 16 b") 17 PASS Succeeded: "/".getFile("a 18 b") 19 PASS Succeeded: "/".getFile("a 20 b") 21 PASS Succeeded: "/".getFile("ab") 22 PASS Succeeded: "/".getFile("ab") 23 PASS Succeeded: "/".getFile("ab") 24 PASS Succeeded: "/".getFile("ab") 25 PASS Succeeded: "/".getFile("ab") 26 PASS Succeeded: "/".getFile("ab") 27 PASS Succeeded: "/".getFile("ab") 28 PASS Succeeded: "/".getFile("ab") 29 PASS Succeeded: "/".getFile("ab") 30 PASS Succeeded: "/".getFile("ab") 31 PASS Succeeded: "/".getFile("ab") 32 PASS Succeeded: "/".getFile("ab") 33 PASS Succeeded: "/".getFile("ab") 34 PASS Succeeded: "/".getFile("ab") 35 PASS Succeeded: "/".getFile("a 36 b") 37 PASS Succeeded: "/".getFile("a 38 b") 39 PASS Succeeded: "/".getFile("a 40 b") 34 41 PASS Verified entry: ENTRY {path:/ab name:ab type:FILE} 35 42 Finished running tests. -
trunk/LayoutTests/fast/filesystem/resources/op-get-entry.js
r79797 r103516 50 50 tests: [ 51 51 function(helper) { helper.getDirectory('/a', './b', {create:true}); }, 52 function(helper) { helper.getDirectory('/a', './...', {create:true}); }, 52 53 function(helper) { helper.getDirectory('/a', '../b', {create:true}); }, 53 54 function(helper) { helper.getDirectory('/a', '../../b/c', {create:true}); }, 54 55 function(helper) { helper.getDirectory('/a', '/a/../../d', {create:true}); }, 55 56 function(helper) { helper.getDirectory('/a', '/a/../../b/./c/../../../../../e', {create:true}); }, 56 function(helper) { helper.getDirectory('/a', '.../f', {create:true} , FileError.INVALID_MODIFICATION_ERR); },57 function(helper) { helper.getDirectory('/a', '/a/../.../g', {create:true}, FileError. INVALID_MODIFICATION_ERR); },57 function(helper) { helper.getDirectory('/a', '.../f', {create:true}); }, 58 function(helper) { helper.getDirectory('/a', '/a/../.../g', {create:true}, FileError.NOT_FOUND_ERR); }, 58 59 function(helper) { helper.getFile('/a', './b.txt', {create:true}); }, 59 60 function(helper) { helper.getFile('/a', '../b.txt', {create:true}); }, … … 61 62 function(helper) { helper.getFile('/a', '/a/../../d.txt', {create:true}); }, 62 63 function(helper) { helper.getFile('/a', '/a/../../b/./c/../../../../../e.txt', {create:true}); }, 63 function(helper) { helper.getFile('/a', '.../f.txt', {create:true} , FileError.INVALID_MODIFICATION_ERR); },64 function(helper) { helper.getFile('/a', '/a/../.../g.txt', {create:true}, FileError. INVALID_MODIFICATION_ERR); },64 function(helper) { helper.getFile('/a', '.../f.txt', {create:true}); }, 65 function(helper) { helper.getFile('/a', '/a/../.../g.txt', {create:true}, FileError.NOT_FOUND_ERR); }, 65 66 ], 66 67 postcondition: [ -
trunk/LayoutTests/fast/filesystem/resources/op-restricted-chars.js
r69339 r103516 2 2 { 3 3 name: 'RestrictedChars', 4 precondition: [ ], 4 precondition: [ 5 {fullPath:'/ab', isDirectory:true}, 6 ], 5 7 tests: [ 6 // Restricted character in 'path' parameter. 8 // Test for difficult characters in 'path' parameters. 9 function(helper) { helper.getFile('/', 'a<b', {create:true}, 0); }, 10 function(helper) { helper.getFile('/', 'a>b', {create:true}, 0); }, 11 function(helper) { helper.getFile('/', 'a:b', {create:true}, 0); }, 12 function(helper) { helper.getFile('/', 'a?b', {create:true}, 0); }, 13 function(helper) { helper.getFile('/', 'a*b', {create:true}, 0); }, 14 function(helper) { helper.getFile('/', 'a"b', {create:true}, 0); }, 15 function(helper) { helper.getFile('/', 'a|b', {create:true}, 0); }, 16 17 function(helper) { helper.getFile('/', '<ab', {create:true}, 0); }, 18 function(helper) { helper.getFile('/', ':ab', {create:true}, 0); }, 19 function(helper) { helper.getFile('/', '?ab', {create:true}, 0); }, 20 function(helper) { helper.getFile('/', '*ab', {create:true}, 0); }, 21 function(helper) { helper.getFile('/', '"ab', {create:true}, 0); }, 22 function(helper) { helper.getFile('/', '|ab', {create:true}, 0); }, 23 24 function(helper) { helper.getFile('/', 'ab<', {create:true}, 0); }, 25 function(helper) { helper.getFile('/', 'ab:', {create:true}, 0); }, 26 function(helper) { helper.getFile('/', 'ab?', {create:true}, 0); }, 27 function(helper) { helper.getFile('/', 'ab*', {create:true}, 0); }, 28 function(helper) { helper.getFile('/', 'ab"', {create:true}, 0); }, 29 function(helper) { helper.getFile('/', 'ab|', {create:true}, 0); }, 30 31 // Only '\\' is disallowed. 7 32 function(helper) { helper.getFile('/', 'a\\b', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 8 function(helper) { helper.getFile('/', 'a<b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },9 function(helper) { helper.getFile('/', 'a>b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },10 function(helper) { helper.getFile('/', 'a:b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },11 function(helper) { helper.getFile('/', 'a?b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },12 function(helper) { helper.getFile('/', 'a*b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },13 function(helper) { helper.getFile('/', 'a"b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },14 function(helper) { helper.getFile('/', 'a|b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },15 33 16 function(helper) { helper.getFile('/', '\\ab', {create:true}, FileError.INVALID_MODIFICATION_ERR); },17 function(helper) { helper. getFile('/', '<ab', {create:true}, FileError.INVALID_MODIFICATION_ERR); },18 function(helper) { helper. getFile('/', ':ab', {create:true}, FileError.INVALID_MODIFICATION_ERR); },19 function(helper) { helper. getFile('/', '?ab', {create:true}, FileError.INVALID_MODIFICATION_ERR); },20 function(helper) { helper. getFile('/', '*ab', {create:true}, FileError.INVALID_MODIFICATION_ERR); },21 function(helper) { helper. getFile('/', '"ab', {create:true}, FileError.INVALID_MODIFICATION_ERR); },22 function(helper) { helper. getFile('/', '|ab', {create:true}, FileError.INVALID_MODIFICATION_ERR); },34 // Test for difficult characters in 'name' parameters. 35 function(helper) { helper.copy('/ab', '/', ' a<b', 0); }, 36 function(helper) { helper.copy('/ab', '/', ' a:b', 0); }, 37 function(helper) { helper.copy('/ab', '/', ' a?b', 0); }, 38 function(helper) { helper.copy('/ab', '/', ' a*b', 0); }, 39 function(helper) { helper.copy('/ab', '/', ' a"b', 0); }, 40 function(helper) { helper.copy('/ab', '/', ' a|b', 0); }, 23 41 24 function(helper) { helper.getFile('/', 'ab\\', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 25 function(helper) { helper.getFile('/', 'ab<', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 26 function(helper) { helper.getFile('/', 'ab:', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 27 function(helper) { helper.getFile('/', 'ab?', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 28 function(helper) { helper.getFile('/', 'ab*', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 29 function(helper) { helper.getFile('/', 'ab"', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 30 function(helper) { helper.getFile('/', 'ab|', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 31 32 // This should succeed. 33 function(helper) { helper.getFile('/', 'ab', {create:true}); }, 34 35 // Restricted character in 'name' parameters. 36 function(helper) { helper.copy('/ab', '/', 'a\\b',FileError.INVALID_MODIFICATION_ERR); }, 37 function(helper) { helper.copy('/ab', '/', 'a<b', FileError.INVALID_MODIFICATION_ERR); }, 38 function(helper) { helper.copy('/ab', '/', 'a:b', FileError.INVALID_MODIFICATION_ERR); }, 39 function(helper) { helper.copy('/ab', '/', 'a?b', FileError.INVALID_MODIFICATION_ERR); }, 40 function(helper) { helper.copy('/ab', '/', 'a*b', FileError.INVALID_MODIFICATION_ERR); }, 41 function(helper) { helper.copy('/ab', '/', 'a"b', FileError.INVALID_MODIFICATION_ERR); }, 42 function(helper) { helper.copy('/ab', '/', 'a|b', FileError.INVALID_MODIFICATION_ERR); }, 43 44 // 'Name' parameter cannot contain '/'. 42 // 'Name' parameter cannot contain '/' or '\\'. 45 43 function(helper) { helper.copy('/ab', '/', 'a/b', FileError.INVALID_MODIFICATION_ERR); }, 44 function(helper) { helper.copy('/ab', '/', 'a\\b', FileError.INVALID_MODIFICATION_ERR); }, 46 45 ], 47 46 postcondition: [ 48 {fullPath:'/ab'}, 47 {fullPath:'/ab', isDirectory:true}, 48 {fullPath:'a<b', isDirectory:false}, 49 {fullPath:' a|b', isDirectory:true} 49 50 ], 50 51 }, -
trunk/LayoutTests/fast/filesystem/resources/op-restricted-names.js
r69339 r103516 1 1 var testCases = [ 2 2 { 3 name: 'Restricted Chars',3 name: 'RestrictedNames', 4 4 precondition: [ 5 {fullPath:'/a', isDirectory:true} 5 {fullPath:'/a', isDirectory:true}, 6 {fullPath:'/b', isDirectory:true}, 7 {fullPath:'/c', isDirectory:true} 6 8 ], 7 9 tests: [ 8 function(helper) { helper.getFile('/', 'con', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 9 function(helper) { helper.getFile('/', 'CON', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 10 function(helper) { helper.getFile('/', 'Con', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 11 function(helper) { helper.getFile('/', 'cOn.txt', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 12 function(helper) { helper.getFile('/', 'a/coN', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 10 function(helper) { helper.getFile('/', '.', {create:true}, FileError.SECURITY_ERR); }, 11 function(helper) { helper.getFile('/', '..', {create:true}, FileError.SECURITY_ERR); }, 12 function(helper) { helper.getFile('/', 'con', {create:true}, 0); }, 13 function(helper) { helper.getFile('/', 'CON', {create:true}, 0); }, 14 function(helper) { helper.getFile('/', 'Con', {create:true}, 0); }, 15 function(helper) { helper.getFile('/', 'cOn.txt', {create:true}, 0); }, 16 function(helper) { helper.getFile('/', 'a/coN', {create:true}, 0); }, 13 17 14 function(helper) { helper.getFile('/', 'prn', {create:true}, FileError.INVALID_MODIFICATION_ERR); },15 function(helper) { helper.getFile('/', 'PRN', {create:true}, FileError.INVALID_MODIFICATION_ERR); },16 function(helper) { helper.getFile('/', 'Prn', {create:true}, FileError.INVALID_MODIFICATION_ERR); },17 function(helper) { helper.getFile('/', 'pRn.txt', {create:true}, FileError.INVALID_MODIFICATION_ERR); },18 function(helper) { helper.getFile('/', 'a/prN', {create:true}, FileError.INVALID_MODIFICATION_ERR); },18 function(helper) { helper.getFile('/', 'prn', {create:true}, 0); }, 19 function(helper) { helper.getFile('/', 'PRN', {create:true}, 0); }, 20 function(helper) { helper.getFile('/', 'Prn', {create:true}, 0); }, 21 function(helper) { helper.getFile('/', 'pRn.txt', {create:true}, 0); }, 22 function(helper) { helper.getFile('/', 'a/prN', {create:true}, 0); }, 19 23 20 function(helper) { helper.getFile('/', 'aux', {create:true}, FileError.INVALID_MODIFICATION_ERR); },21 function(helper) { helper.getFile('/', 'AUX', {create:true}, FileError.INVALID_MODIFICATION_ERR); },22 function(helper) { helper.getFile('/', 'Aux', {create:true}, FileError.INVALID_MODIFICATION_ERR); },23 function(helper) { helper.getFile('/', 'aUx.txt', {create:true}, FileError.INVALID_MODIFICATION_ERR); },24 function(helper) { helper.getFile('/', 'a/auX', {create:true}, FileError.INVALID_MODIFICATION_ERR); },24 function(helper) { helper.getFile('/', 'aux', {create:true}, 0); }, 25 function(helper) { helper.getFile('/', 'AUX', {create:true}, 0); }, 26 function(helper) { helper.getFile('/', 'Aux', {create:true}, 0); }, 27 function(helper) { helper.getFile('/', 'aUx.txt', {create:true}, 0); }, 28 function(helper) { helper.getFile('/', 'a/auX', {create:true}, 0); }, 25 29 26 function(helper) { helper.getFile('/', 'nul', {create:true}, FileError.INVALID_MODIFICATION_ERR); },27 function(helper) { helper.getFile('/', 'NUL', {create:true}, FileError.INVALID_MODIFICATION_ERR); },28 function(helper) { helper.getFile('/', 'Nul', {create:true}, FileError.INVALID_MODIFICATION_ERR); },29 function(helper) { helper.getFile('/', 'nUl.txt', {create:true}, FileError.INVALID_MODIFICATION_ERR); },30 function(helper) { helper.getFile('/', 'a/nuL', {create:true}, FileError.INVALID_MODIFICATION_ERR); },30 function(helper) { helper.getFile('/', 'nul', {create:true}, 0); }, 31 function(helper) { helper.getFile('/', 'NUL', {create:true}, 0); }, 32 function(helper) { helper.getFile('/', 'Nul', {create:true}, 0); }, 33 function(helper) { helper.getFile('/', 'nUl.txt', {create:true}, 0); }, 34 function(helper) { helper.getFile('/', 'a/nuL', {create:true}, 0); }, 31 35 32 function(helper) { helper.getFile('/', 'com1', {create:true}, FileError.INVALID_MODIFICATION_ERR); },33 function(helper) { helper.getFile('/', 'COM2', {create:true}, FileError.INVALID_MODIFICATION_ERR); },34 function(helper) { helper.getFile('/', 'Com4', {create:true}, FileError.INVALID_MODIFICATION_ERR); },35 function(helper) { helper.getFile('/', 'cOM7.foo', {create:true}, FileError.INVALID_MODIFICATION_ERR); },36 function(helper) { helper.getFile('/', ' b/coM9', {create:true}, FileError.INVALID_MODIFICATION_ERR); },36 function(helper) { helper.getFile('/', 'com1', {create:true}, 0); }, 37 function(helper) { helper.getFile('/', 'COM2', {create:true}, 0); }, 38 function(helper) { helper.getFile('/', 'Com4', {create:true}, 0); }, 39 function(helper) { helper.getFile('/', 'cOM7.foo', {create:true}, 0); }, 40 function(helper) { helper.getFile('/', 'a/coM9', {create:true}, 0); }, 37 41 38 function(helper) { helper.getFile('/', 'lpt1', {create:true}, FileError.INVALID_MODIFICATION_ERR); },39 function(helper) { helper.getFile('/', 'LPT2', {create:true}, FileError.INVALID_MODIFICATION_ERR); },40 function(helper) { helper.getFile('/', 'Lpt4', {create:true}, FileError.INVALID_MODIFICATION_ERR); },41 function(helper) { helper.getFile('/', 'lPT7.foo', {create:true}, FileError.INVALID_MODIFICATION_ERR); },42 function(helper) { helper.getFile('/', ' b/lpT9', {create:true}, FileError.INVALID_MODIFICATION_ERR); },42 function(helper) { helper.getFile('/', 'lpt1', {create:true}, 0); }, 43 function(helper) { helper.getFile('/', 'LPT2', {create:true}, 0); }, 44 function(helper) { helper.getFile('/', 'Lpt4', {create:true}, 0); }, 45 function(helper) { helper.getFile('/', 'lPT7.foo', {create:true}, 0); }, 46 function(helper) { helper.getFile('/', 'a/lpT9', {create:true}, 0); }, 43 47 44 // Names should not end with period or whitespace. 45 function(helper) { helper.getFile('/', 'foo ', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 46 function(helper) { helper.getFile('/', 'foo\n', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 47 function(helper) { helper.getFile('/', 'foo.', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 48 function(helper) { helper.copy('/a', '/', 'foo ', FileError.INVALID_MODIFICATION_ERR); }, 49 function(helper) { helper.copy('/a', '/', 'foo\t', FileError.INVALID_MODIFICATION_ERR); }, 50 function(helper) { helper.copy('/a', '/', 'foo.', FileError.INVALID_MODIFICATION_ERR); }, 51 function(helper) { helper.move('/a', '/', 'foo ', FileError.INVALID_MODIFICATION_ERR); }, 52 function(helper) { helper.move('/a', '/', 'foo\t', FileError.INVALID_MODIFICATION_ERR); }, 53 function(helper) { helper.move('/a', '/', 'foo.', FileError.INVALID_MODIFICATION_ERR); }, 48 function(helper) { helper.getFile('/', 'foo ', {create:true}, 0); }, 49 function(helper) { helper.getFile('/', 'foo\n', {create:true}, 0); }, 50 function(helper) { helper.getFile('/', 'foo.', {create:true}, 0); }, 51 function(helper) { helper.copy('/a', '/', 'foo ', 0); }, 52 function(helper) { helper.copy('/a', '/', 'foo\t', 0); }, 53 function(helper) { helper.copy('/a', '/', 'foo..', 0); }, 54 function(helper) { helper.move('/a', '/', 'foo ', 0); }, 55 function(helper) { helper.move('/b', '/', 'foo\t\t', 0); }, 56 function(helper) { helper.move('/c', '/', 'foo.....', 0); }, 54 57 ], 55 58 postcondition: [ 56 {fullPath:'/a', isDirectory:true} 59 {fullPath:'/foo ', isDirectory:true}, 60 {fullPath:'/foo\t\t', isDirectory:true}, 61 {fullPath:'/foo.....', isDirectory:true} 57 62 ], 58 63 }, -
trunk/LayoutTests/fast/filesystem/resources/op-restricted-unicode.js
r97541 r103516 6 6 function(helper) { helper.getFile('/', 'ab', {create:true}); }, 7 7 8 // Restricted character in 'path' parameter.8 // Embedded NULs aren't allowed; anything else in the first 32 is fair game. 9 9 function(helper) { helper.getFile('/', 'a\u0000b', {create:true}, FileError.INVALID_MODIFICATION_ERR); }, 10 function(helper) { helper.getFile('/', 'a\u0001b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },11 function(helper) { helper.getFile('/', 'a\u0002b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },12 function(helper) { helper.getFile('/', 'a\u0003b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },13 function(helper) { helper.getFile('/', 'a\u0004b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },14 function(helper) { helper.getFile('/', 'a\u0005b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },15 function(helper) { helper.getFile('/', 'a\u0006b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },16 function(helper) { helper.getFile('/', 'a\u0007b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },17 function(helper) { helper.getFile('/', 'a\u0008b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },18 function(helper) { helper.getFile('/', 'a\u0009b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },19 function(helper) { helper.getFile('/', 'a\u000ab', {create:true}, FileError.INVALID_MODIFICATION_ERR); },20 function(helper) { helper.getFile('/', 'a\u000bb', {create:true}, FileError.INVALID_MODIFICATION_ERR); },21 function(helper) { helper.getFile('/', 'a\u000cb', {create:true}, FileError.INVALID_MODIFICATION_ERR); },22 function(helper) { helper.getFile('/', 'a\u000db', {create:true}, FileError.INVALID_MODIFICATION_ERR); },23 function(helper) { helper.getFile('/', 'a\u000eb', {create:true}, FileError.INVALID_MODIFICATION_ERR); },24 function(helper) { helper.getFile('/', 'a\u000fb', {create:true}, FileError.INVALID_MODIFICATION_ERR); },25 function(helper) { helper.getFile('/', 'a\u0010b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },26 function(helper) { helper.getFile('/', 'a\u0011b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },27 function(helper) { helper.getFile('/', 'a\u0012b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },28 function(helper) { helper.getFile('/', 'a\u0013b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },29 function(helper) { helper.getFile('/', 'a\u0014b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },30 function(helper) { helper.getFile('/', 'a\u0015b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },31 function(helper) { helper.getFile('/', 'a\u0016b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },32 function(helper) { helper.getFile('/', 'a\u0017b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },33 function(helper) { helper.getFile('/', 'a\u0018b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },34 function(helper) { helper.getFile('/', 'a\u0019b', {create:true}, FileError.INVALID_MODIFICATION_ERR); },35 function(helper) { helper.getFile('/', 'a\u001ab', {create:true}, FileError.INVALID_MODIFICATION_ERR); },36 function(helper) { helper.getFile('/', 'a\u001bb', {create:true}, FileError.INVALID_MODIFICATION_ERR); },37 function(helper) { helper.getFile('/', 'a\u001cb', {create:true}, FileError.INVALID_MODIFICATION_ERR); },38 function(helper) { helper.getFile('/', 'a\u001db', {create:true}, FileError.INVALID_MODIFICATION_ERR); },39 function(helper) { helper.getFile('/', 'a\u001eb', {create:true}, FileError.INVALID_MODIFICATION_ERR); }10 function(helper) { helper.getFile('/', 'a\u0001b', {create:true}, 0); }, 11 function(helper) { helper.getFile('/', 'a\u0002b', {create:true}, 0); }, 12 function(helper) { helper.getFile('/', 'a\u0003b', {create:true}, 0); }, 13 function(helper) { helper.getFile('/', 'a\u0004b', {create:true}, 0); }, 14 function(helper) { helper.getFile('/', 'a\u0005b', {create:true}, 0); }, 15 function(helper) { helper.getFile('/', 'a\u0006b', {create:true}, 0); }, 16 function(helper) { helper.getFile('/', 'a\u0007b', {create:true}, 0); }, 17 function(helper) { helper.getFile('/', 'a\u0008b', {create:true}, 0); }, 18 function(helper) { helper.getFile('/', 'a\u0009b', {create:true}, 0); }, 19 function(helper) { helper.getFile('/', 'a\u000ab', {create:true}, 0); }, 20 function(helper) { helper.getFile('/', 'a\u000bb', {create:true}, 0); }, 21 function(helper) { helper.getFile('/', 'a\u000cb', {create:true}, 0); }, 22 function(helper) { helper.getFile('/', 'a\u000db', {create:true}, 0); }, 23 function(helper) { helper.getFile('/', 'a\u000eb', {create:true}, 0); }, 24 function(helper) { helper.getFile('/', 'a\u000fb', {create:true}, 0); }, 25 function(helper) { helper.getFile('/', 'a\u0010b', {create:true}, 0); }, 26 function(helper) { helper.getFile('/', 'a\u0011b', {create:true}, 0); }, 27 function(helper) { helper.getFile('/', 'a\u0012b', {create:true}, 0); }, 28 function(helper) { helper.getFile('/', 'a\u0013b', {create:true}, 0); }, 29 function(helper) { helper.getFile('/', 'a\u0014b', {create:true}, 0); }, 30 function(helper) { helper.getFile('/', 'a\u0015b', {create:true}, 0); }, 31 function(helper) { helper.getFile('/', 'a\u0016b', {create:true}, 0); }, 32 function(helper) { helper.getFile('/', 'a\u0017b', {create:true}, 0); }, 33 function(helper) { helper.getFile('/', 'a\u0018b', {create:true}, 0); }, 34 function(helper) { helper.getFile('/', 'a\u0019b', {create:true}, 0); }, 35 function(helper) { helper.getFile('/', 'a\u001ab', {create:true}, 0); }, 36 function(helper) { helper.getFile('/', 'a\u001bb', {create:true}, 0); }, 37 function(helper) { helper.getFile('/', 'a\u001cb', {create:true}, 0); }, 38 function(helper) { helper.getFile('/', 'a\u001db', {create:true}, 0); }, 39 function(helper) { helper.getFile('/', 'a\u001eb', {create:true}, 0); } 40 40 ], 41 41 postcondition: [ -
trunk/Source/WebCore/ChangeLog
r103513 r103516 1 2011-12-22 Eric Uhrhane <ericu@chromium.org> 2 3 [filesystem] Remove old filesystem naming restrictions 4 https://bugs.webkit.org/show_bug.cgi?id=62813 5 6 Reviewed by David Levin. 7 8 * fileapi/DOMFilePath.cpp: 9 (WebCore::DOMFilePath::isValidPath): Replace strict restrictions with 10 minimal safety [no files named "." or "..", no use of '\\' or '\0' in 11 paths, no use of '/' in file names]. 12 1 13 2011-12-22 Greg Billock <gbillock@google.com> 2 14 -
trunk/Source/WebCore/fileapi/DOMFilePath.cpp
r95901 r103516 115 115 } 116 116 117 // Check the naming restrictions defined in FileSystem API 8.3.118 // http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#naming-restrictions119 117 bool DOMFilePath::isValidPath(const String& path) 120 118 { … … 122 120 return true; 123 121 124 // Chars 0-31 in UTF-8 prepresentation are not allowed. 125 for (size_t i = 0; i < path.length(); ++i) 126 if (path[i] < 32) 127 return false; 128 129 // Unallowed names. 130 DEFINE_STATIC_LOCAL(RegularExpression, unallowedNamesRegExp1, ("(/|^)(CON|PRN|AUX|NUL)([\\./]|$)", TextCaseInsensitive)); 131 DEFINE_STATIC_LOCAL(RegularExpression, unallowedNamesRegExp2, ("(/|^)(COM|LPT)[1-9]([\\./]|$)", TextCaseInsensitive)); 132 133 if (unallowedNamesRegExp1.match(path) >= 0) 134 return false; 135 if (unallowedNamesRegExp2.match(path) >= 0) 122 // Embedded NULs are not allowed. 123 if (path.find(static_cast<UChar>(0)) != WTF::notFound) 136 124 return false; 137 125 138 // Names must not end with period or whitespace. 139 DEFINE_STATIC_LOCAL(RegularExpression, endingRegExp, ("[\\.\\s](/|$)", TextCaseInsensitive)); 140 141 if (endingRegExp.match(path) >= 0) 126 // While not [yet] restricted by the spec, '\\' complicates implementation for Chromium. 127 if (path.find('\\') != WTF::notFound) 142 128 return false; 143 129 144 // Unallowed chars: '\', '<', '>', ':', '?', '*', '"', '|' 145 // (We don't check '/' here as this method takes paths as its argument.) 146 DEFINE_STATIC_LOCAL(RegularExpression, unallowedCharsRegExp, ("[\\\\<>:\\?\\*\"|]", TextCaseInsensitive)); 147 148 if (unallowedCharsRegExp.match(path) >= 0) 149 return false; 150 130 // This method is only called on fully-evaluated absolute paths. Any sign of ".." or "." is likely an attempt to break out of the sandbox. 131 Vector<String> components; 132 path.split(DOMFilePath::separator, components); 133 for (size_t i = 0; i < components.size(); ++i) { 134 if (components[i] == ".") 135 return false; 136 if (components[i] == "..") 137 return false; 138 } 151 139 return true; 152 140 }
Note: See TracChangeset
for help on using the changeset viewer.