From d9aa699f697e992c87acfb560130ca12638f7028 Mon Sep 17 00:00:00 2001 From: Evan Lucas Date: Mon, 7 Mar 2016 10:31:14 -0600 Subject: [PATCH] path: fix normalize for absolutes Fixes a regression introduced by b212be08f62a48656c5befd8be0a82d691ea66e4. path.normalize(''/a/b/c/../../../x/y/z'') should return '/x/y/z'. Fixes: https://github.com/nodejs/node/issues/5585 PR-URL: https://github.com/nodejs/node/pull/5589 Reviewed-By: Myles Borins Reviewed-By: James M Snell Reviewed-By: Brian White --- lib/path.js | 4 ++-- test/parallel/test-path.js | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/path.js b/lib/path.js index e26b5bc6760d42..7c80f867b1578c 100644 --- a/lib/path.js +++ b/lib/path.js @@ -44,7 +44,7 @@ function normalizeStringWin32(path, allowAboveRoot) { dots = 0; continue; } - } else if (res.length === 2) { + } else if (res.length === 2 || res.length === 1) { res = ''; lastSlash = i; dots = 0; @@ -110,7 +110,7 @@ function normalizeStringPosix(path, allowAboveRoot) { dots = 0; continue; } - } else if (res.length === 2) { + } else if (res.length === 2 || res.length === 1) { res = ''; lastSlash = i; dots = 0; diff --git a/test/parallel/test-path.js b/test/parallel/test-path.js index fce54a52fb3a9b..eb49360defd169 100644 --- a/test/parallel/test-path.js +++ b/test/parallel/test-path.js @@ -377,6 +377,7 @@ assert.equal(path.win32.normalize('a//b//./c'), 'a\\b\\c'); assert.equal(path.win32.normalize('a//b//.'), 'a\\b'); assert.equal(path.win32.normalize('//server/share/dir/file.ext'), '\\\\server\\share\\dir\\file.ext'); +assert.equal(path.win32.normalize('/a/b/c/../../../x/y/z'), '\\x\\y\\z'); assert.equal(path.posix.normalize('./fixtures///b/../b/c.js'), 'fixtures/b/c.js'); @@ -384,6 +385,8 @@ assert.equal(path.posix.normalize('/foo/../../../bar'), '/bar'); assert.equal(path.posix.normalize('a//b//../b'), 'a/b'); assert.equal(path.posix.normalize('a//b//./c'), 'a/b/c'); assert.equal(path.posix.normalize('a//b//.'), 'a/b'); +assert.equal(path.posix.normalize('/a/b/c/../../../x/y/z'), '/x/y/z'); +assert.equal(path.posix.normalize('///..//./foo/.//bar'), '/foo/bar'); // path.resolve tests