@@ -11,6 +11,7 @@ const regularFolder = process.env.ALLOWEDFOLDER;
1111const regularFile = process . env . ALLOWEDFILE ;
1212const blockedFolder = process . env . BLOCKEDFOLDER ;
1313const blockedFile = process . env . BLOCKEDFILE ;
14+ const blockedFileURL = require ( 'url' ) . pathToFileURL ( process . env . BLOCKEDFILE ) ;
1415const relativeProtectedFile = process . env . RELATIVEBLOCKEDFILE ;
1516const relativeProtectedFolder = process . env . RELATIVEBLOCKEDFOLDER ;
1617const absoluteProtectedFile = path . resolve ( relativeProtectedFile ) ;
@@ -30,6 +31,13 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
3031permission : 'FileSystemWrite' ,
3132resource : path . toNamespacedPath ( blockedFile ) ,
3233} ) ;
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+ } ) ) ;
3341assert . throws ( ( ) => {
3442fs . writeFile ( relativeProtectedFile , 'example' , ( ) => { } ) ;
3543} , {
@@ -91,6 +99,13 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
9199permission : 'FileSystemWrite' ,
92100resource : path . toNamespacedPath ( blockedFile ) ,
93101} ) ;
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+ } ) ) ;
94109assert . throws ( ( ) => {
95110fs . utimes ( relativeProtectedFile , new Date ( ) , new Date ( ) , ( ) => { } ) ;
96111} , {
@@ -117,6 +132,13 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
117132permission : 'FileSystemWrite' ,
118133resource : path . toNamespacedPath ( blockedFile ) ,
119134} ) ;
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+ } ) ) ;
120142}
121143
122144// fs.mkdir
@@ -169,6 +191,15 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
169191permission : 'FileSystemWrite' ,
170192resource : path . toNamespacedPath ( blockedFile ) ,
171193} ) ;
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+ } ) ) ;
172203assert . throws ( ( ) => {
173204fs . rename ( relativeProtectedFile , path . join ( relativeProtectedFile , 'renamed' ) , ( err ) => {
174205assert . ifError ( err ) ;
@@ -263,6 +294,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
263294code : 'ERR_ACCESS_DENIED' ,
264295permission : 'FileSystemWrite' ,
265296} ) ;
297+ assert . throws ( ( ) => {
298+ fs . open ( blockedFileURL , fs . constants . O_RDWR | 0x10000000 , common . mustNotCall ( ) ) ;
299+ } , {
300+ code : 'ERR_ACCESS_DENIED' ,
301+ permission : 'FileSystemWrite' ,
302+ } ) ;
266303assert . rejects ( async ( ) => {
267304await fs . promises . open ( blockedFile , fs . constants . O_RDWR | fs . constants . O_NOFOLLOW ) ;
268305} , {
@@ -290,6 +327,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
290327code : 'ERR_ACCESS_DENIED' ,
291328permission : 'FileSystemWrite' ,
292329} ) ;
330+ assert . throws ( ( ) => {
331+ fs . chmod ( blockedFileURL , 0o755 , common . mustNotCall ( ) ) ;
332+ } , {
333+ code : 'ERR_ACCESS_DENIED' ,
334+ permission : 'FileSystemWrite' ,
335+ } ) ;
293336assert . rejects ( async ( ) => {
294337await fs . promises . chmod ( blockedFile , 0o755 ) ;
295338} , {
@@ -324,6 +367,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
324367code : 'ERR_ACCESS_DENIED' ,
325368permission : 'FileSystemWrite' ,
326369} ) ;
370+ assert . throws ( ( ) => {
371+ fs . appendFile ( blockedFileURL , 'new data' , common . mustNotCall ( ) ) ;
372+ } , {
373+ code : 'ERR_ACCESS_DENIED' ,
374+ permission : 'FileSystemWrite' ,
375+ } ) ;
327376assert . rejects ( async ( ) => {
328377await fs . promises . appendFile ( blockedFile , 'new data' ) ;
329378} , {
@@ -340,6 +389,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
340389code : 'ERR_ACCESS_DENIED' ,
341390permission : 'FileSystemWrite' ,
342391} ) ;
392+ assert . throws ( ( ) => {
393+ fs . chown ( blockedFileURL , 1541 , 999 , common . mustNotCall ( ) ) ;
394+ } , {
395+ code : 'ERR_ACCESS_DENIED' ,
396+ permission : 'FileSystemWrite' ,
397+ } ) ;
343398assert . rejects ( async ( ) => {
344399await fs . promises . chown ( blockedFile , 1541 , 999 ) ;
345400} , {
@@ -356,6 +411,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
356411code : 'ERR_ACCESS_DENIED' ,
357412permission : 'FileSystemWrite' ,
358413} ) ;
414+ assert . throws ( ( ) => {
415+ fs . lchown ( blockedFileURL , 1541 , 999 , common . mustNotCall ( ) ) ;
416+ } , {
417+ code : 'ERR_ACCESS_DENIED' ,
418+ permission : 'FileSystemWrite' ,
419+ } ) ;
359420assert . rejects ( async ( ) => {
360421await fs . promises . lchown ( blockedFile , 1541 , 999 ) ;
361422} , {
@@ -372,6 +433,12 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
372433code : 'ERR_ACCESS_DENIED' ,
373434permission : 'FileSystemWrite' ,
374435} ) ;
436+ assert . throws ( ( ) => {
437+ fs . link ( blockedFileURL , path . join ( blockedFolder , '/linked' ) , common . mustNotCall ( ) ) ;
438+ } , {
439+ code : 'ERR_ACCESS_DENIED' ,
440+ permission : 'FileSystemWrite' ,
441+ } ) ;
375442assert . rejects ( async ( ) => {
376443await fs . promises . link ( blockedFile , path . join ( blockedFolder , '/linked' ) ) ;
377444} , {
@@ -391,4 +458,13 @@ const absoluteProtectedFolder = path.resolve(relativeProtectedFolder);
391458permission : 'FileSystemWrite' ,
392459resource : path . toNamespacedPath ( blockedFile ) ,
393460} ) ;
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+ } ) ;
394470}
0 commit comments