66
77private import javascript
88private import AbstractValuesImpl
9+ private import AnalyzedParameters
910private import semmle.javascript.dataflow.InferredTypes
1011private import semmle.javascript.dataflow.Refinements
1112
@@ -140,41 +141,6 @@ class AnalyzedVarDef extends VarDef {
140141 TopLevel getTopLevel ( ) { result = this .( ASTNode ) .getTopLevel ( ) }
141142}
142143
143- private predicate isAnalyzedParameter ( Parameter p ) {
144- exists ( FunctionWithAnalyzedParameters f , int parmIdx | p = f .getParameter ( parmIdx ) |
145- // we cannot track flow into rest parameters
146- not p .( Parameter ) .isRestParameter ( )
147- )
148- }
149-
150- private class AnalyzedParameter extends AnalyzedValueNode {
151- override Parameter astNode ;
152-
153- AnalyzedParameter ( ) { isAnalyzedParameter ( astNode ) }
154-
155- FunctionWithAnalyzedParameters getFunction ( ) { astNode = result .getAParameter ( ) }
156-
157- override AbstractValue getALocalValue ( ) {
158- exists ( DataFlow:: AnalyzedNode pred |
159- getFunction ( ) .argumentPassing ( astNode , pred .asExpr ( ) ) and
160- result = pred .getALocalValue ( )
161- )
162- or
163- not getFunction ( ) .mayReceiveArgument ( astNode ) and
164- result = TAbstractUndefined ( )
165- or
166- result = astNode .getDefault ( ) .analyze ( ) .getALocalValue ( )
167- }
168-
169- override predicate isIncomplete ( DataFlow:: Incompleteness cause ) {
170- getFunction ( ) .isIncomplete ( cause )
171- or
172- not getFunction ( ) .argumentPassing ( astNode , _) and
173- getFunction ( ) .mayReceiveArgument ( astNode ) and
174- cause = "call"
175- }
176- }
177-
178144/**
179145 * Flow analysis for simple parameters of selected functions.
180146 */
@@ -193,8 +159,6 @@ private class AnalyzedRestParameter extends AnalyzedValueNode {
193159 AnalyzedRestParameter ( ) { astNode .( Parameter ) .isRestParameter ( ) }
194160
195161 override AbstractValue getALocalValue ( ) { result = TAbstractOtherObject ( ) }
196-
197- override predicate isIncomplete ( DataFlow:: Incompleteness cause ) { none ( ) }
198162}
199163
200164/**
@@ -679,7 +643,7 @@ abstract class FunctionWithAnalyzedParameters extends Function {
679643 * Holds if `p` is a parameter of this function and `arg` is
680644 * the corresponding argument.
681645 */
682- abstract predicate argumentPassing ( SimpleParameter p , Expr arg ) ;
646+ abstract predicate argumentPassing ( Parameter p , Expr arg ) ;
683647
684648 /**
685649 * Holds if `p` is a parameter of this function that may receive a value from an argument.
@@ -699,7 +663,7 @@ abstract private class CallWithAnalyzedParameters extends FunctionWithAnalyzedPa
699663 */
700664 abstract DataFlow:: InvokeNode getAnInvocation ( ) ;
701665
702- override predicate argumentPassing ( SimpleParameter p , Expr arg ) {
666+ override predicate argumentPassing ( Parameter p , Expr arg ) {
703667 exists ( DataFlow:: InvokeNode invk , int argIdx | invk = getAnInvocation ( ) |
704668 p = getParameter ( argIdx ) and
705669 not p .isRestParameter ( ) and
0 commit comments