File tree Expand file tree Collapse file tree 2 files changed +11
-6
lines changed
Expand file tree Collapse file tree 2 files changed +11
-6
lines changed Original file line number Diff line number Diff line change @@ -1279,13 +1279,18 @@ class HashLiteralNode extends LocalSourceNode, ExprNode {
12791279 * into calls to `Array.[]`, so this includes both desugared calls as well as
12801280 * explicit calls.
12811281 */
1282- class ArrayLiteralNode extends LocalSourceNode , ExprNode {
1283- ArrayLiteralNode ( ) { super .getExprNode ( ) instanceof CfgNodes:: ExprNodes:: ArrayLiteralCfgNode }
1282+ class ArrayLiteralNode extends LocalSourceNode , CallNode {
1283+ private CfgNodes:: ExprNodes:: ArrayLiteralCfgNode arrayNode ;
1284+
1285+ ArrayLiteralNode ( ) { super .getExprNode ( ) = arrayNode }
12841286
12851287 /**
12861288 * Gets an element of the array.
12871289 */
1288- Node getAnElement ( ) { result = this .( CallNode ) .getPositionalArgument ( _) }
1290+ Node getAnElement ( ) { result = this .getElement ( _) }
1291+
1292+ /** Gets the `i`th element of the array. */
1293+ Node getElement ( int i ) { result = this .getPositionalArgument ( i ) }
12891294}
12901295
12911296/**
Original file line number Diff line number Diff line change @@ -30,14 +30,14 @@ module Rack {
3030 DataFlow:: ParameterNode getEnv ( ) { result = call .getParameter ( 0 ) }
3131 }
3232
33- private predicate isRackResponse ( DataFlow:: Node r ) {
33+ class ResponseNode extends DataFlow:: ArrayLiteralNode {
3434 // [status, headers, body]
35- r . asExpr ( ) . ( ArrayLiteralCfgNode ) . getNumberOfArguments ( ) = 3
35+ ResponseNode ( ) { this . getNumberOfArguments ( ) = 3 }
3636 }
3737
3838 private DataFlow:: LocalSourceNode trackRackResponse ( TypeTracker t ) {
3939 t .start ( ) and
40- isRackResponse ( result )
40+ result instanceof ResponseNode
4141 or
4242 exists ( TypeTracker t2 | result = trackRackResponse ( t2 ) .track ( t2 , t ) )
4343 }
You can’t perform that action at this time.
0 commit comments