@@ -11,6 +11,7 @@ const regularFolder = process.env.ALLOWEDFOLDER;
11
11
const regularFile = process . env . ALLOWEDFILE ;
12
12
const blockedFolder = process . env . BLOCKEDFOLDER ;
13
13
const blockedFile = process . env . BLOCKEDFILE ;
14
+ const blockedFileURL = require ( 'url' ) . pathToFileURL ( process . env . BLOCKEDFILE ) ;
14
15
const relativeProtectedFile = process . env . RELATIVEBLOCKEDFILE ;
15
16
const relativeProtectedFolder = process . env . RELATIVEBLOCKEDFOLDER ;
16
17
const absoluteProtectedFile = path . resolve ( relativeProtectedFile ) ;
@@ -30,6 +31,13 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
30
31
permission : 'FileSystemWrite' ,
31
32
resource : path . toNamespacedPath ( blockedFile ) ,
32
33
} ) ;
34
+ assert . throws ( ( ) => {
35
+ fs . writeFile ( blockedFileURL , 'example' , ( ) => { } ) ;
36
+ } , common . expectsError ( {
37
+ code : 'ERR_ACCESS_DENIED' ,
38
+ permission : 'FileSystemWrite' ,
39
+ resource : path . toNamespacedPath ( blockedFile ) ,
40
+ } ) ) ;
33
41
assert . throws ( ( ) => {
34
42
fs . writeFile ( relativeProtectedFile , 'example' , ( ) => { } ) ;
35
43
} , {
@@ -91,6 +99,13 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
91
99
permission : 'FileSystemWrite' ,
92
100
resource : path . toNamespacedPath ( blockedFile ) ,
93
101
} ) ;
102
+ assert . throws ( ( ) => {
103
+ fs . utimes ( blockedFileURL , new Date ( ) , new Date ( ) , ( ) => { } ) ;
104
+ } , common . expectsError ( {
105
+ code : 'ERR_ACCESS_DENIED' ,
106
+ permission : 'FileSystemWrite' ,
107
+ resource : path . toNamespacedPath ( blockedFile ) ,
108
+ } ) ) ;
94
109
assert . throws ( ( ) => {
95
110
fs . utimes ( relativeProtectedFile , new Date ( ) , new Date ( ) , ( ) => { } ) ;
96
111
} , {
@@ -117,6 +132,13 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
117
132
permission : 'FileSystemWrite' ,
118
133
resource : path . toNamespacedPath ( blockedFile ) ,
119
134
} ) ;
135
+ assert . throws ( ( ) => {
136
+ fs . lutimes ( blockedFileURL , new Date ( ) , new Date ( ) , ( ) => { } ) ;
137
+ } , common . expectsError ( {
138
+ code : 'ERR_ACCESS_DENIED' ,
139
+ permission : 'FileSystemWrite' ,
140
+ resource : path . toNamespacedPath ( blockedFile ) ,
141
+ } ) ) ;
120
142
}
121
143
122
144
// fs.mkdir
@@ -169,6 +191,15 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
169
191
permission : 'FileSystemWrite' ,
170
192
resource : path . toNamespacedPath ( blockedFile ) ,
171
193
} ) ;
194
+ assert . throws ( ( ) => {
195
+ fs . rename ( blockedFileURL , path . join ( blockedFile , 'renamed' ) , ( err ) => {
196
+ assert . ifError ( err ) ;
197
+ } ) ;
198
+ } , common . expectsError ( {
199
+ code : 'ERR_ACCESS_DENIED' ,
200
+ permission : 'FileSystemWrite' ,
201
+ resource : path . toNamespacedPath ( blockedFile ) ,
202
+ } ) ) ;
172
203
assert . throws ( ( ) => {
173
204
fs . rename ( relativeProtectedFile , path . join ( relativeProtectedFile , 'renamed' ) , ( err ) => {
174
205
assert . ifError ( err ) ;
@@ -263,6 +294,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
263
294
code : 'ERR_ACCESS_DENIED' ,
264
295
permission : 'FileSystemWrite' ,
265
296
} ) ;
297
+ assert . throws ( ( ) => {
298
+ fs . open ( blockedFileURL , fs . constants . O_RDWR | 0x10000000 , common . mustNotCall ( ) ) ;
299
+ } , {
300
+ code : 'ERR_ACCESS_DENIED' ,
301
+ permission : 'FileSystemWrite' ,
302
+ } ) ;
266
303
assert . rejects ( async ( ) => {
267
304
await fs . promises . open ( blockedFile , fs . constants . O_RDWR | fs . constants . O_NOFOLLOW ) ;
268
305
} , {
@@ -290,6 +327,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
290
327
code : 'ERR_ACCESS_DENIED' ,
291
328
permission : 'FileSystemWrite' ,
292
329
} ) ;
330
+ assert . throws ( ( ) => {
331
+ fs . chmod ( blockedFileURL , 0o755 , common . mustNotCall ( ) ) ;
332
+ } , {
333
+ code : 'ERR_ACCESS_DENIED' ,
334
+ permission : 'FileSystemWrite' ,
335
+ } ) ;
293
336
assert . rejects ( async ( ) => {
294
337
await fs . promises . chmod ( blockedFile , 0o755 ) ;
295
338
} , {
@@ -324,6 +367,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
324
367
code : 'ERR_ACCESS_DENIED' ,
325
368
permission : 'FileSystemWrite' ,
326
369
} ) ;
370
+ assert . throws ( ( ) => {
371
+ fs . appendFile ( blockedFileURL , 'new data' , common . mustNotCall ( ) ) ;
372
+ } , {
373
+ code : 'ERR_ACCESS_DENIED' ,
374
+ permission : 'FileSystemWrite' ,
375
+ } ) ;
327
376
assert . rejects ( async ( ) => {
328
377
await fs . promises . appendFile ( blockedFile , 'new data' ) ;
329
378
} , {
@@ -340,6 +389,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
340
389
code : 'ERR_ACCESS_DENIED' ,
341
390
permission : 'FileSystemWrite' ,
342
391
} ) ;
392
+ assert . throws ( ( ) => {
393
+ fs . chown ( blockedFileURL , 1541 , 999 , common . mustNotCall ( ) ) ;
394
+ } , {
395
+ code : 'ERR_ACCESS_DENIED' ,
396
+ permission : 'FileSystemWrite' ,
397
+ } ) ;
343
398
assert . rejects ( async ( ) => {
344
399
await fs . promises . chown ( blockedFile , 1541 , 999 ) ;
345
400
} , {
@@ -356,6 +411,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
356
411
code : 'ERR_ACCESS_DENIED' ,
357
412
permission : 'FileSystemWrite' ,
358
413
} ) ;
414
+ assert . throws ( ( ) => {
415
+ fs . lchown ( blockedFileURL , 1541 , 999 , common . mustNotCall ( ) ) ;
416
+ } , {
417
+ code : 'ERR_ACCESS_DENIED' ,
418
+ permission : 'FileSystemWrite' ,
419
+ } ) ;
359
420
assert . rejects ( async ( ) => {
360
421
await fs . promises . lchown ( blockedFile , 1541 , 999 ) ;
361
422
} , {
@@ -372,6 +433,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
372
433
code : 'ERR_ACCESS_DENIED' ,
373
434
permission : 'FileSystemWrite' ,
374
435
} ) ;
436
+ assert . throws ( ( ) => {
437
+ fs . link ( blockedFileURL , path . join ( blockedFolder , '/linked' ) , common . mustNotCall ( ) ) ;
438
+ } , {
439
+ code : 'ERR_ACCESS_DENIED' ,
440
+ permission : 'FileSystemWrite' ,
441
+ } ) ;
375
442
assert . rejects ( async ( ) => {
376
443
await fs . promises . link ( blockedFile , path . join ( blockedFolder , '/linked' ) ) ;
377
444
} , {
@@ -391,4 +458,13 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
391
458
permission : 'FileSystemWrite' ,
392
459
resource : path . toNamespacedPath ( blockedFile ) ,
393
460
} ) ;
461
+ assert . throws ( ( ) => {
462
+ fs . unlink ( blockedFileURL , ( err ) => {
463
+ assert . ifError ( err ) ;
464
+ } ) ;
465
+ } , {
466
+ code : 'ERR_ACCESS_DENIED' ,
467
+ permission : 'FileSystemWrite' ,
468
+ resource : path . toNamespacedPath ( blockedFile ) ,
469
+ } ) ;
394
470
}
0 commit comments