diff --git a/src/lib/libfs.js b/src/lib/libfs.js index a5a505974fa61..d75253960327d 100644 --- a/src/lib/libfs.js +++ b/src/lib/libfs.js @@ -199,7 +199,12 @@ FS.staticInit(); if (parts[i] === '..') { current_path = PATH.dirname(current_path); - current = current.parent; + if (FS.isRoot(current)) { + path = current_path + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } else { + current = current.parent; + } continue; } diff --git a/test/other/codesize/test_codesize_cxx_ctors1.gzsize b/test/other/codesize/test_codesize_cxx_ctors1.gzsize index 47d8481e26395..d8f3dc7482479 100644 --- a/test/other/codesize/test_codesize_cxx_ctors1.gzsize +++ b/test/other/codesize/test_codesize_cxx_ctors1.gzsize @@ -1 +1 @@ -8219 +8232 diff --git a/test/other/codesize/test_codesize_cxx_ctors1.jssize b/test/other/codesize/test_codesize_cxx_ctors1.jssize index 06311b2f6d512..27c796a162b97 100644 --- a/test/other/codesize/test_codesize_cxx_ctors1.jssize +++ b/test/other/codesize/test_codesize_cxx_ctors1.jssize @@ -1 +1 @@ -19929 +19993 diff --git a/test/other/codesize/test_codesize_cxx_ctors2.gzsize b/test/other/codesize/test_codesize_cxx_ctors2.gzsize index 348fae5d25831..2b886f8252fa8 100644 --- a/test/other/codesize/test_codesize_cxx_ctors2.gzsize +++ b/test/other/codesize/test_codesize_cxx_ctors2.gzsize @@ -1 +1 @@ -8207 +8221 diff --git a/test/other/codesize/test_codesize_cxx_ctors2.jssize b/test/other/codesize/test_codesize_cxx_ctors2.jssize index 6f61eb5911ccb..7d5b516726c18 100644 --- a/test/other/codesize/test_codesize_cxx_ctors2.jssize +++ b/test/other/codesize/test_codesize_cxx_ctors2.jssize @@ -1 +1 @@ -19907 +19971 diff --git a/test/other/codesize/test_codesize_cxx_except.gzsize b/test/other/codesize/test_codesize_cxx_except.gzsize index a7c037571b56e..0f05e3f519b14 100644 --- a/test/other/codesize/test_codesize_cxx_except.gzsize +++ b/test/other/codesize/test_codesize_cxx_except.gzsize @@ -1 +1 @@ -9217 +9231 diff --git a/test/other/codesize/test_codesize_cxx_except.jssize b/test/other/codesize/test_codesize_cxx_except.jssize index 0b61c5d5076c1..aa74b4197966a 100644 --- a/test/other/codesize/test_codesize_cxx_except.jssize +++ b/test/other/codesize/test_codesize_cxx_except.jssize @@ -1 +1 @@ -23666 +23730 diff --git a/test/other/codesize/test_codesize_cxx_except_wasm.gzsize b/test/other/codesize/test_codesize_cxx_except_wasm.gzsize index a6fb412e17821..964a1e5390897 100644 --- a/test/other/codesize/test_codesize_cxx_except_wasm.gzsize +++ b/test/other/codesize/test_codesize_cxx_except_wasm.gzsize @@ -1 +1 @@ -8165 +8177 diff --git a/test/other/codesize/test_codesize_cxx_except_wasm.jssize b/test/other/codesize/test_codesize_cxx_except_wasm.jssize index 0ad70010616d0..e56210bf45015 100644 --- a/test/other/codesize/test_codesize_cxx_except_wasm.jssize +++ b/test/other/codesize/test_codesize_cxx_except_wasm.jssize @@ -1 +1 @@ -19821 +19885 diff --git a/test/other/codesize/test_codesize_cxx_except_wasm_legacy.gzsize b/test/other/codesize/test_codesize_cxx_except_wasm_legacy.gzsize index a6fb412e17821..964a1e5390897 100644 --- a/test/other/codesize/test_codesize_cxx_except_wasm_legacy.gzsize +++ b/test/other/codesize/test_codesize_cxx_except_wasm_legacy.gzsize @@ -1 +1 @@ -8165 +8177 diff --git a/test/other/codesize/test_codesize_cxx_except_wasm_legacy.jssize b/test/other/codesize/test_codesize_cxx_except_wasm_legacy.jssize index 0ad70010616d0..e56210bf45015 100644 --- a/test/other/codesize/test_codesize_cxx_except_wasm_legacy.jssize +++ b/test/other/codesize/test_codesize_cxx_except_wasm_legacy.jssize @@ -1 +1 @@ -19821 +19885 diff --git a/test/other/codesize/test_codesize_cxx_lto.gzsize b/test/other/codesize/test_codesize_cxx_lto.gzsize index 0b9cf696bb395..6f786d398902e 100644 --- a/test/other/codesize/test_codesize_cxx_lto.gzsize +++ b/test/other/codesize/test_codesize_cxx_lto.gzsize @@ -1 +1 @@ -8234 +8245 diff --git a/test/other/codesize/test_codesize_cxx_lto.jssize b/test/other/codesize/test_codesize_cxx_lto.jssize index 8ebad44492287..2f8cb06ad1fcd 100644 --- a/test/other/codesize/test_codesize_cxx_lto.jssize +++ b/test/other/codesize/test_codesize_cxx_lto.jssize @@ -1 +1 @@ -20003 +20067 diff --git a/test/other/codesize/test_codesize_cxx_mangle.gzsize b/test/other/codesize/test_codesize_cxx_mangle.gzsize index d5ba7638b38b0..7f4fc4bd45847 100644 --- a/test/other/codesize/test_codesize_cxx_mangle.gzsize +++ b/test/other/codesize/test_codesize_cxx_mangle.gzsize @@ -1 +1 @@ -9255 +9268 diff --git a/test/other/codesize/test_codesize_cxx_mangle.jssize b/test/other/codesize/test_codesize_cxx_mangle.jssize index 33208100dcef2..fe17b4115c2b8 100644 --- a/test/other/codesize/test_codesize_cxx_mangle.jssize +++ b/test/other/codesize/test_codesize_cxx_mangle.jssize @@ -1 +1 @@ -23780 +23844 diff --git a/test/other/codesize/test_codesize_cxx_noexcept.gzsize b/test/other/codesize/test_codesize_cxx_noexcept.gzsize index 47d8481e26395..d8f3dc7482479 100644 --- a/test/other/codesize/test_codesize_cxx_noexcept.gzsize +++ b/test/other/codesize/test_codesize_cxx_noexcept.gzsize @@ -1 +1 @@ -8219 +8232 diff --git a/test/other/codesize/test_codesize_cxx_noexcept.jssize b/test/other/codesize/test_codesize_cxx_noexcept.jssize index 06311b2f6d512..27c796a162b97 100644 --- a/test/other/codesize/test_codesize_cxx_noexcept.jssize +++ b/test/other/codesize/test_codesize_cxx_noexcept.jssize @@ -1 +1 @@ -19929 +19993 diff --git a/test/other/codesize/test_codesize_files_js_fs.gzsize b/test/other/codesize/test_codesize_files_js_fs.gzsize index ef8e0e613aa5d..8b822a3f7bf83 100644 --- a/test/other/codesize/test_codesize_files_js_fs.gzsize +++ b/test/other/codesize/test_codesize_files_js_fs.gzsize @@ -1 +1 @@ -7528 +7542 diff --git a/test/other/codesize/test_codesize_files_js_fs.jssize b/test/other/codesize/test_codesize_files_js_fs.jssize index 2509094d1ebca..69a8a69a318fa 100644 --- a/test/other/codesize/test_codesize_files_js_fs.jssize +++ b/test/other/codesize/test_codesize_files_js_fs.jssize @@ -1 +1 @@ -18487 +18551 diff --git a/test/other/test_resolve_mountpoint_parent.c b/test/other/test_resolve_mountpoint_parent.c new file mode 100644 index 0000000000000..56cc339f44230 --- /dev/null +++ b/test/other/test_resolve_mountpoint_parent.c @@ -0,0 +1,15 @@ +#include +#include +#include +#include +#include "assert.h" + +int main(int argc, char **argv) { + EM_ASM({ + FS.mkdir('/working'); + FS.mkdir('/other'); + FS.mount(NODEFS, { root: '.' }, '/working'); + }); + struct stat statBuf; + assert(stat("/working/../other", &statBuf) == 0); +} diff --git a/test/other/test_resolve_mountpoint_parent.out b/test/other/test_resolve_mountpoint_parent.out new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/test/test_other.py b/test/test_other.py index 7bdd4ef0c4d99..1bf34e0d6fa3f 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -8190,6 +8190,11 @@ def test_realpath_2(self): create_file('Folder/testfile.txt', '') self.do_other_test('test_realpath_2.c', emcc_args=['--embed-file', 'testfile.txt', '--embed-file', 'Folder']) + @requires_node + @also_with_wasmfs + def test_resolve_mountpoint_parent(self): + self.do_other_test('test_resolve_mountpoint_parent.c', emcc_args=['-sFORCE_FILESYSTEM', '-lnodefs.js']) + @with_env_modify({'EMCC_LOGGING': '0'}) # this test assumes no emcc output def test_no_warnings(self): # build once before to make sure system libs etc. exist