@@ -306,7 +306,7 @@ module NodeJSLib {
306
306
307
307
FsFlowTarget ( ) {
308
308
exists ( DataFlow:: CallNode call , string methodName |
309
- call = DataFlow :: moduleMember ( "fs" , methodName ) .getACall ( )
309
+ call = Fs :: moduleMember ( methodName ) .getACall ( )
310
310
|
311
311
methodName = "realpathSync" and
312
312
tainted = call .getArgument ( 0 ) and
@@ -430,27 +430,32 @@ module NodeJSLib {
430
430
}
431
431
432
432
/**
433
- * A member `member` from module `fs` or its drop-in replacements `graceful-fs`, `fs-extra`, `original-fs` .
433
+ * Provides predicates for working with the "fs" module and its variants as a single module .
434
434
*/
435
- private DataFlow:: SourceNode fsModuleMember ( string member ) {
436
- result = fsModule ( DataFlow:: TypeTracker:: end ( ) ) .getAPropertyRead ( member )
437
- }
435
+ module Fs {
436
+ /**
437
+ * A member `member` from module `fs` or its drop-in replacements `graceful-fs`, `fs-extra`, `original-fs`.
438
+ */
439
+ DataFlow:: SourceNode moduleMember ( string member ) {
440
+ result = fsModule ( DataFlow:: TypeTracker:: end ( ) ) .getAPropertyRead ( member )
441
+ }
438
442
439
- private DataFlow:: SourceNode fsModule ( DataFlow:: TypeTracker t ) {
440
- exists ( string moduleName |
441
- moduleName = "fs" or
442
- moduleName = "graceful-fs" or
443
- moduleName = "fs-extra" or
444
- moduleName = "original-fs"
445
- |
446
- result = DataFlow:: moduleImport ( moduleName )
443
+ private DataFlow:: SourceNode fsModule ( DataFlow:: TypeTracker t ) {
444
+ exists ( string moduleName |
445
+ moduleName = "fs" or
446
+ moduleName = "graceful-fs" or
447
+ moduleName = "fs-extra" or
448
+ moduleName = "original-fs"
449
+ |
450
+ result = DataFlow:: moduleImport ( moduleName )
451
+ or
452
+ // extra support for flexible names
453
+ result .asExpr ( ) .( Require ) .getArgument ( 0 ) .mayHaveStringValue ( moduleName )
454
+ ) and
455
+ t .start ( )
447
456
or
448
- // extra support for flexible names
449
- result .asExpr ( ) .( Require ) .getArgument ( 0 ) .mayHaveStringValue ( moduleName )
450
- ) and
451
- t .start ( )
452
- or
453
- exists ( DataFlow:: TypeTracker t2 | result = fsModule ( t2 ) .track ( t2 , t ) )
457
+ exists ( DataFlow:: TypeTracker t2 | result = fsModule ( t2 ) .track ( t2 , t ) )
458
+ }
454
459
}
455
460
456
461
/**
@@ -459,7 +464,7 @@ module NodeJSLib {
459
464
private class NodeJSFileSystemAccess extends FileSystemAccess , DataFlow:: CallNode {
460
465
string methodName ;
461
466
462
- NodeJSFileSystemAccess ( ) { this = maybePromisified ( fsModuleMember ( methodName ) ) .getACall ( ) }
467
+ NodeJSFileSystemAccess ( ) { this = maybePromisified ( Fs :: moduleMember ( methodName ) ) .getACall ( ) }
463
468
464
469
/**
465
470
* Gets the name of the called method.
@@ -582,8 +587,8 @@ module NodeJSLib {
582
587
name = "readdir" or
583
588
name = "realpath"
584
589
|
585
- this = fsModuleMember ( name ) .getACall ( ) .getCallback ( [ 1 .. 2 ] ) .getParameter ( 1 ) or
586
- this = fsModuleMember ( name + "Sync" ) .getACall ( )
590
+ this = Fs :: moduleMember ( name ) .getACall ( ) .getCallback ( [ 1 .. 2 ] ) .getParameter ( 1 ) or
591
+ this = Fs :: moduleMember ( name + "Sync" ) .getACall ( )
587
592
)
588
593
}
589
594
}
0 commit comments