From cd076138a067b51e6919040897a3a83a3fb8e9a6 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Sun, 3 Dec 2023 21:19:54 +0900 Subject: [PATCH] fs: fix fs.promises.realpath for long paths on Windows Unlike other fs functions that work with paths, realpath isn't using pathModule.toNamespacedPath prior to calling libuv function. This is causing issues on windows. Windows long path test is also improved to cover the mentioned issue. Fixes: https://github.com/nodejs/node/issues/51031 --- lib/internal/fs/promises.js | 2 +- test/parallel/test-fs-long-path.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/internal/fs/promises.js b/lib/internal/fs/promises.js index 43d4ad7c0e9f63..3a65cb4669dbc1 100644 --- a/lib/internal/fs/promises.js +++ b/lib/internal/fs/promises.js @@ -1160,7 +1160,7 @@ async function realpath(path, options) { options = getOptions(options); path = getValidatedPath(path); return await PromisePrototypeThen( - binding.realpath(path, options.encoding, kUsePromises), + binding.realpath(pathModule.toNamespacedPath(path), options.encoding, kUsePromises), undefined, handleErrorFromBinding, ); diff --git a/test/parallel/test-fs-long-path.js b/test/parallel/test-fs-long-path.js index f3a8ea7a9ebf9e..11724a88dc4c29 100644 --- a/test/parallel/test-fs-long-path.js +++ b/test/parallel/test-fs-long-path.js @@ -46,4 +46,7 @@ fs.writeFile(fullPath, 'ok', common.mustSucceed(() => { // Tests https://github.com/nodejs/node/issues/39721 fs.realpath.native(fullPath, common.mustSucceed()); + + // Tests https://github.com/nodejs/node/issues/51031 + fs.promises.realpath(fullPath).then(common.mustCall(), common.mustNotCall()); }));