Skip to content

Commit 8d485f1

Browse files
LiviaMedeirosaduh95
authored andcommitted
fs: make mutating options in Promises readdir() not affect results
PR-URL: #56057 Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 8288f57 commit 8d485f1

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

lib/internal/fs/promises.js

+4
Original file line numberDiff line numberDiff line change
@@ -944,6 +944,10 @@ async function readdirRecursive(originalPath, options) {
944944

945945
async function readdir(path, options) {
946946
options = getOptions(options);
947+
948+
// Make shallow copy to prevent mutating options from affecting results
949+
options = copyObject(options);
950+
947951
path = getValidatedPath(path);
948952
if (options.recursive) {
949953
return readdirRecursive(path, options);

test/parallel/test-fs-readdir-types.js

+8
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,14 @@ fs.readdir(readdirDir, {
7878
assertDirents(dirents);
7979
})().then(common.mustCall());
8080

81+
// Check that mutating options doesn't affect results
82+
(async () => {
83+
const options = { withFileTypes: true };
84+
const direntsPromise = fs.promises.readdir(readdirDir, options);
85+
options.withFileTypes = false;
86+
assertDirents(await direntsPromise);
87+
})().then(common.mustCall());
88+
8189
// Check for correct types when the binding returns unknowns
8290
const UNKNOWN = constants.UV_DIRENT_UNKNOWN;
8391
const oldReaddir = binding.readdir;

0 commit comments

Comments
 (0)