fs: make mutating `options` in Promises `readdir()` not affect results · nodejs/node@8d485f1

2 files changed

lines changed

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);

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;