Skip to content

Commit 76affb6

Browse files
cjihrigtargos
authored andcommitted
fs: only operate on buffers in rimraf
PR-URL: #30569 Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Ben Coe <bencoe@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
1 parent ffc910f commit 76affb6

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

‎lib/internal/fs/rimraf.js‎

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const {
1111
Set,
1212
}=primordials;
1313

14+
const{ Buffer }=require('buffer');
1415
const{
1516
chmod,
1617
chmodSync,
@@ -25,7 +26,7 @@ const {
2526
unlink,
2627
unlinkSync
2728
}=require('fs');
28-
const{join}=require('path');
29+
const{sep}=require('path');
2930
const{ setTimeout }=require('timers');
3031
const{ sleep }=require('internal/util');
3132
constnotEmptyErrorCodes=newSet(['ENOTEMPTY','EEXIST','EPERM']);
@@ -34,6 +35,8 @@ const retryErrorCodes = new Set(
3435
constisWindows=process.platform==='win32';
3536
constepermHandler=isWindows ? fixWinEPERM : _rmdir;
3637
constepermHandlerSync=isWindows ? fixWinEPERMSync : _rmdirSync;
38+
constreaddirEncoding='buffer';
39+
constseparator=Buffer.from(sep);
3740

3841

3942
functionrimraf(path,options,callback){
@@ -122,7 +125,9 @@ function _rmdir(path, options, originalErr, callback) {
122125

123126

124127
function_rmchildren(path,options,callback){
125-
readdir(path,(err,files)=>{
128+
constpathBuf=Buffer.from(path);
129+
130+
readdir(pathBuf,readdirEncoding,(err,files)=>{
126131
if(err)
127132
returncallback(err);
128133

@@ -134,7 +139,9 @@ function _rmchildren(path, options, callback) {
134139
letdone=false;
135140

136141
files.forEach((child)=>{
137-
rimraf(join(path,child),options,(err)=>{
142+
constchildPath=Buffer.concat([pathBuf,separator,child]);
143+
144+
rimraf(childPath,options,(err)=>{
138145
if(done)
139146
return;
140147

@@ -211,8 +218,12 @@ function _rmdirSync(path, options, originalErr) {
211218
// original removal. Windows has a habit of not closing handles promptly
212219
// when files are deleted, resulting in spurious ENOTEMPTY failures. Work
213220
// around that issue by retrying on Windows.
214-
readdirSync(path).forEach((child)=>{
215-
rimrafSync(join(path,child),options);
221+
constpathBuf=Buffer.from(path);
222+
223+
readdirSync(pathBuf,readdirEncoding).forEach((child)=>{
224+
constchildPath=Buffer.concat([pathBuf,separator,child]);
225+
226+
rimrafSync(childPath,options);
216227
});
217228

218229
consttries=options.maxRetries+1;

0 commit comments

Comments
 (0)