◐ Shell
clean mode source ↗

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

Original file line numberDiff line numberDiff line change

@@ -943,6 +943,10 @@ async function readdirRecursive(originalPath, options) {

943943
944944

async function readdir(path, options) {

945945

options = getOptions(options);

946+
947+

// Make shallow copy to prevent mutating options from affecting results

948+

options = copyObject(options);

949+
946950

path = getValidatedPath(path);

947951

if (options.recursive) {

948952

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;