File tree Expand file tree Collapse file tree
javascript/ql/test/library-tests/Arrays Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import javascript
2+
3+ class ArrayFlowConfig extends DataFlow:: Configuration {
4+ ArrayFlowConfig ( ) { this = "ArrayFlowConfig" }
5+
6+ override predicate isSource ( DataFlow:: Node source ) {
7+ source .asExpr ( ) .getStringValue ( ) = "source"
8+ }
9+
10+ override predicate isSink ( DataFlow:: Node sink ) {
11+ sink = any ( DataFlow:: CallNode call | call .getCalleeName ( ) = "sink" ) .getAnArgument ( )
12+ }
13+ }
14+
15+ from ArrayFlowConfig config , DataFlow:: Node src , DataFlow:: Node snk
16+ where config .hasFlow ( src , snk )
17+ select src , snk
Original file line number Diff line number Diff line change 1+ ( function ( ) {
2+ let source = "source" ;
3+
4+ var obj = { foo : source } ;
5+ sink ( obj . foo ) ; // NOT OK
6+
7+ var arr = [ ] ;
8+ arr . push ( source ) ;
9+
10+ for ( var i = 0 ; i < arr . length ; i ++ ) {
11+ sink ( arr [ i ] ) ; // NOT OK
12+ }
13+
14+
15+ arr . forEach ( ( e ) => sink ( e ) ) ; // NOT OK
16+ arr . map ( ( e ) => sink ( e ) ) ; // NOT OK
17+
18+ [ 1 , 2 , 3 ] . map ( i => "source" ) . forEach ( e => sink ( e ) ) ; // NOT OK.
19+
20+ sink ( arr . pop ( ) ) ; // NOT OK
21+
22+ var arr2 = Array . from ( "source" ) ;
23+ sink ( arr2 . pop ( ) ) ; // NOT OK
24+
25+ var arr3 = [ "source" ] ;
26+ sink ( arr3 . pop ( ) ) ; // NOT OK
27+
28+ var arr4 = [ ] ;
29+ arr4 . splice ( 0 , 0 , "source" ) ;
30+ sink ( arr4 . pop ( ) ) ; // NOT OK
31+
32+ var arr5 = [ ] . concat ( arr4 ) ;
33+ sink ( arr5 . pop ( ) ) ; // NOT OK
34+
35+ sink ( arr5 . slice ( 2 ) . pop ( ) ) ; // NOT OK
36+
37+ var arr6 = [ ] ;
38+ for ( var i = 0 ; i < arr5 . length ; i ++ ) {
39+ arr6 [ i ] = arr5 [ i ] ;
40+ }
41+ sink ( arr6 . pop ( ) ) ; // NOT OK
42+ } ) ;
You can’t perform that action at this time.
0 commit comments