basic/path-util: make path_simplify() skip leading '/..'
I.e., /.. becomes /, /../foo becomes /foo, /../../bar becomes /bar, etc. We can do this unconditionally, without access to the file system, because the parent of the root directory always resolves to. /.. in other places is handled as before, because resolving it properly would require access to the file system which we don't want to do in path_simplify().
This commit is contained in:
@@ -158,7 +158,7 @@ TEST(path_simplify) {
|
||||
test_path_simplify_one("///", "/", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("///.//", "/", 0);
|
||||
test_path_simplify_one("///.//.///", "/", 0);
|
||||
test_path_simplify_one("////.././///../.", "/../..", 0);
|
||||
test_path_simplify_one("////.././///../.", "/", 0);
|
||||
test_path_simplify_one(".", ".", 0);
|
||||
test_path_simplify_one("./", ".", 0);
|
||||
test_path_simplify_one("./", "./", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
@@ -174,6 +174,46 @@ TEST(path_simplify) {
|
||||
"../aaa/.bbb/../c./d.dd/..eeee/..", 0);
|
||||
test_path_simplify_one("abc///", "abc/", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
|
||||
test_path_simplify_one("/../abc", "/abc", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/../abc///", "/abc/", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/../abc///", "/abc", 0);
|
||||
test_path_simplify_one("/../abc", "/abc", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/../abc///..", "/abc/..", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/../abc///../", "/abc/../", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/../abc///../", "/abc/..", 0);
|
||||
|
||||
test_path_simplify_one("/../../abc", "/abc", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/../../abc///", "/abc/", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/../../abc///", "/abc", 0);
|
||||
test_path_simplify_one("/../../abc", "/abc", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/../../abc///../..", "/abc/../..", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/../../abc///../../", "/abc/../../", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/../../abc///../../", "/abc/../..", 0);
|
||||
|
||||
test_path_simplify_one("/.././../abc", "/abc", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/.././../abc///", "/abc/", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/.././../abc///", "/abc", 0);
|
||||
test_path_simplify_one("/.././../abc", "/abc", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/.././../abc///../..", "/abc/../..", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/.././../abc///../../", "/abc/../../", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/.././../abc///../../", "/abc/../..", 0);
|
||||
|
||||
test_path_simplify_one("/./.././../abc", "/abc", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/./.././../abc///", "/abc/", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/./.././../abc///", "/abc", 0);
|
||||
test_path_simplify_one("/./.././../abc", "/abc", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/./.././../abc///../..", "/abc/../..", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/./.././../abc///../../", "/abc/../../", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/./.././../abc///../../", "/abc/../..", 0);
|
||||
|
||||
test_path_simplify_one("/.../abc", "/.../abc", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/.../abc///", "/.../abc/", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/.../abc///", "/.../abc", 0);
|
||||
test_path_simplify_one("/.../abc", "/.../abc", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/.../abc///...", "/.../abc/...", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/.../abc///.../", "/.../abc/.../", PATH_SIMPLIFY_KEEP_TRAILING_SLASH);
|
||||
test_path_simplify_one("/.../abc///.../", "/.../abc/...", 0);
|
||||
|
||||
memset(foo, 'a', sizeof(foo) -1);
|
||||
char_array_0(foo);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user