@@ -1327,8 +1327,8 @@ private module MkStage<StageSig PrevStage> {
13271327 */
13281328 pragma [ nomagic]
13291329 additional predicate fwdFlow (
1330- NodeEx node , FlowState state , Cc cc , ParameterPositionOption summaryCtx , ApOption argAp ,
1331- Ap ap , ApApprox apa , Configuration config
1330+ NodeEx node , FlowState state , Cc cc , ParamNodeOption summaryCtx , ApOption argAp , Ap ap ,
1331+ ApApprox apa , Configuration config
13321332 ) {
13331333 fwdFlow0 ( node , state , cc , summaryCtx , argAp , ap , apa , config ) and
13341334 PrevStage:: revFlow ( node , state , apa , config ) and
@@ -1337,21 +1337,21 @@ private module MkStage<StageSig PrevStage> {
13371337
13381338 pragma [ inline]
13391339 additional predicate fwdFlow (
1340- NodeEx node , FlowState state , Cc cc , ParameterPositionOption summaryCtx , ApOption argAp ,
1341- Ap ap , Configuration config
1340+ NodeEx node , FlowState state , Cc cc , ParamNodeOption summaryCtx , ApOption argAp , Ap ap ,
1341+ Configuration config
13421342 ) {
13431343 fwdFlow ( node , state , cc , summaryCtx , argAp , ap , _, config )
13441344 }
13451345
13461346 pragma [ nomagic]
13471347 private predicate fwdFlow0 (
1348- NodeEx node , FlowState state , Cc cc , ParameterPositionOption summaryCtx , ApOption argAp ,
1349- Ap ap , ApApprox apa , Configuration config
1348+ NodeEx node , FlowState state , Cc cc , ParamNodeOption summaryCtx , ApOption argAp , Ap ap ,
1349+ ApApprox apa , Configuration config
13501350 ) {
13511351 sourceNode ( node , state , config ) and
13521352 ( if hasSourceCallCtx ( config ) then cc = ccSomeCall ( ) else cc = ccNone ( ) ) and
13531353 argAp = apNone ( ) and
1354- summaryCtx = TParameterPositionNone ( ) and
1354+ summaryCtx = TParamNodeNone ( ) and
13551355 ap = getApNil ( node ) and
13561356 apa = getApprox ( ap )
13571357 or
@@ -1372,15 +1372,15 @@ private module MkStage<StageSig PrevStage> {
13721372 fwdFlow ( mid , pragma [ only_bind_into ] ( state ) , _, _, _, ap , apa , pragma [ only_bind_into ] ( config ) ) and
13731373 jumpStep ( mid , node , config ) and
13741374 cc = ccNone ( ) and
1375- summaryCtx = TParameterPositionNone ( ) and
1375+ summaryCtx = TParamNodeNone ( ) and
13761376 argAp = apNone ( )
13771377 )
13781378 or
13791379 exists ( NodeEx mid , ApNil nil |
13801380 fwdFlow ( mid , state , _, _, _, nil , pragma [ only_bind_into ] ( config ) ) and
13811381 additionalJumpStep ( mid , node , config ) and
13821382 cc = ccNone ( ) and
1383- summaryCtx = TParameterPositionNone ( ) and
1383+ summaryCtx = TParamNodeNone ( ) and
13841384 argAp = apNone ( ) and
13851385 ap = getApNil ( node ) and
13861386 apa = getApprox ( ap )
@@ -1390,7 +1390,7 @@ private module MkStage<StageSig PrevStage> {
13901390 fwdFlow ( mid , state0 , _, _, _, nil , pragma [ only_bind_into ] ( config ) ) and
13911391 additionalJumpStateStep ( mid , state0 , node , state , config ) and
13921392 cc = ccNone ( ) and
1393- summaryCtx = TParameterPositionNone ( ) and
1393+ summaryCtx = TParamNodeNone ( ) and
13941394 argAp = apNone ( ) and
13951395 ap = getApNil ( node ) and
13961396 apa = getApprox ( ap )
@@ -1414,10 +1414,10 @@ private module MkStage<StageSig PrevStage> {
14141414 fwdFlowIn ( _, node , state , _, cc , _, _, ap , apa , config ) and
14151415 if PrevStage:: parameterMayFlowThrough ( node , apa , config )
14161416 then (
1417- summaryCtx = TParameterPositionSome ( node .( ParamNodeEx ) . getPosition ( ) ) and
1417+ summaryCtx = TParamNodeSome ( node .asNode ( ) ) and
14181418 argAp = apSome ( ap )
14191419 ) else (
1420- summaryCtx = TParameterPositionNone ( ) and argAp = apNone ( )
1420+ summaryCtx = TParamNodeNone ( ) and argAp = apNone ( )
14211421 )
14221422 or
14231423 // flow out of a callable
@@ -1433,7 +1433,7 @@ private module MkStage<StageSig PrevStage> {
14331433 )
14341434 or
14351435 // flow through a callable
1436- exists ( DataFlowCall call , ParameterPosition summaryCtx0 , Ap argAp0 |
1436+ exists ( DataFlowCall call , ParamNodeEx summaryCtx0 , Ap argAp0 |
14371437 fwdFlowOutFromArg ( call , node , state , summaryCtx0 , argAp0 , ap , apa , config ) and
14381438 fwdFlowIsEntered ( call , cc , summaryCtx , argAp , summaryCtx0 , argAp0 , config )
14391439 )
@@ -1442,7 +1442,7 @@ private module MkStage<StageSig PrevStage> {
14421442 pragma [ nomagic]
14431443 private predicate fwdFlowStore (
14441444 NodeEx node1 , Ap ap1 , TypedContent tc , NodeEx node2 , FlowState state , Cc cc ,
1445- ParameterPositionOption summaryCtx , ApOption argAp , Configuration config
1445+ ParamNodeOption summaryCtx , ApOption argAp , Configuration config
14461446 ) {
14471447 exists ( DataFlowType contentType , ApApprox apa1 |
14481448 fwdFlow ( node1 , state , cc , summaryCtx , argAp , ap1 , apa1 , config ) and
@@ -1473,8 +1473,8 @@ private module MkStage<StageSig PrevStage> {
14731473
14741474 pragma [ nomagic]
14751475 private predicate fwdFlowRead0 (
1476- NodeEx node1 , FlowState state , Cc cc , ParameterPositionOption summaryCtx , ApOption argAp ,
1477- ApNonNil ap , Configuration config
1476+ NodeEx node1 , FlowState state , Cc cc , ParamNodeOption summaryCtx , ApOption argAp , ApNonNil ap ,
1477+ Configuration config
14781478 ) {
14791479 fwdFlow ( node1 , state , cc , summaryCtx , argAp , ap , config ) and
14801480 PrevStage:: readStepCand ( node1 , _, _, config )
@@ -1483,7 +1483,7 @@ private module MkStage<StageSig PrevStage> {
14831483 pragma [ nomagic]
14841484 private predicate fwdFlowRead (
14851485 Ap ap , Content c , NodeEx node1 , NodeEx node2 , FlowState state , Cc cc ,
1486- ParameterPositionOption summaryCtx , ApOption argAp , Configuration config
1486+ ParamNodeOption summaryCtx , ApOption argAp , Configuration config
14871487 ) {
14881488 fwdFlowRead0 ( node1 , state , cc , summaryCtx , argAp , ap , config ) and
14891489 PrevStage:: readStepCand ( node1 , c , node2 , config ) and
@@ -1493,7 +1493,7 @@ private module MkStage<StageSig PrevStage> {
14931493 pragma [ nomagic]
14941494 private predicate fwdFlowIn (
14951495 DataFlowCall call , ParamNodeEx p , FlowState state , Cc outercc , CcCall innercc ,
1496- ParameterPositionOption summaryCtx , ApOption argAp , Ap ap , ApApprox apa , Configuration config
1496+ ParamNodeOption summaryCtx , ApOption argAp , Ap ap , ApApprox apa , Configuration config
14971497 ) {
14981498 exists ( ArgNodeEx arg , boolean allowsFieldFlow |
14991499 fwdFlow ( arg , state , outercc , summaryCtx , argAp , ap , apa , config ) and
@@ -1505,23 +1505,22 @@ private module MkStage<StageSig PrevStage> {
15051505
15061506 pragma [ nomagic]
15071507 private predicate fwdFlowRetFromArg (
1508- RetNodeEx ret , FlowState state , CcCall ccc , ParameterPosition summaryCtx , ParamNodeEx p ,
1509- Ap argAp , ApApprox argApa , Ap ap , ApApprox apa , Configuration config
1508+ RetNodeEx ret , FlowState state , CcCall ccc , ParamNodeEx summaryCtx , Ap argAp , ApApprox argApa ,
1509+ Ap ap , ApApprox apa , Configuration config
15101510 ) {
1511- exists ( DataFlowCallable c , ReturnKindExt kind |
1511+ exists ( ReturnKindExt kind |
15121512 fwdFlow ( pragma [ only_bind_into ] ( ret ) , state , ccc ,
1513- TParameterPositionSome ( pragma [ only_bind_into ] ( summaryCtx ) ) , apSome ( argAp ) , ap , apa , config ) and
1513+ TParamNodeSome ( pragma [ only_bind_into ] ( summaryCtx .asNode ( ) ) ) , apSome ( argAp ) , ap , apa ,
1514+ config ) and
15141515 getApprox ( argAp ) = argApa and
1515- c = ret .getEnclosingCallable ( ) and
15161516 kind = ret .getKind ( ) and
1517- p .isParameterOf ( c , pragma [ only_bind_into ] ( summaryCtx ) ) and
1518- parameterFlowThroughAllowed ( p , kind )
1517+ parameterFlowThroughAllowed ( summaryCtx , kind )
15191518 )
15201519 }
15211520
15221521 pragma [ inline]
15231522 private predicate fwdFlowInMayFlowThrough (
1524- DataFlowCall call , Cc cc , CcCall innerCc , ParameterPositionOption summaryCtx , ApOption argAp ,
1523+ DataFlowCall call , Cc cc , CcCall innerCc , ParamNodeOption summaryCtx , ApOption argAp ,
15251524 ParamNodeEx param , Ap ap , ApApprox apa , Configuration config
15261525 ) {
15271526 fwdFlowIn ( call , pragma [ only_bind_into ] ( param ) , _, cc , innerCc , summaryCtx , argAp , ap ,
@@ -1553,13 +1552,12 @@ private module MkStage<StageSig PrevStage> {
15531552
15541553 pragma [ nomagic]
15551554 private predicate fwdFlowOutFromArg (
1556- DataFlowCall call , NodeEx out , FlowState state , ParameterPosition summaryCtx , Ap argAp , Ap ap ,
1555+ DataFlowCall call , NodeEx out , FlowState state , ParamNodeEx summaryCtx , Ap argAp , Ap ap ,
15571556 ApApprox apa , Configuration config
15581557 ) {
15591558 exists ( RetNodeEx ret , boolean allowsFieldFlow , CcCall ccc , ApApprox argApa |
15601559 fwdFlowRetFromArg ( pragma [ only_bind_into ] ( ret ) , state , pragma [ only_bind_into ] ( ccc ) ,
1561- summaryCtx , _, argAp , pragma [ only_bind_into ] ( argApa ) , ap , pragma [ only_bind_into ] ( apa ) ,
1562- config ) and
1560+ summaryCtx , argAp , pragma [ only_bind_into ] ( argApa ) , ap , pragma [ only_bind_into ] ( apa ) , config ) and
15631561 fwdFlowThroughOutOfCall ( call , ccc , ret , out , allowsFieldFlow , argApa , apa , config ) and
15641562 ( if allowsFieldFlow = false then ap instanceof ApNil else any ( ) )
15651563 )
@@ -1571,13 +1569,10 @@ private module MkStage<StageSig PrevStage> {
15711569 */
15721570 pragma [ nomagic]
15731571 private predicate fwdFlowIsEntered (
1574- DataFlowCall call , Cc cc , ParameterPositionOption summaryCtx , ApOption argAp ,
1575- ParameterPosition pos , Ap ap , Configuration config
1572+ DataFlowCall call , Cc cc , ParamNodeOption summaryCtx , ApOption argAp , ParamNodeEx p , Ap ap ,
1573+ Configuration config
15761574 ) {
1577- exists ( ParamNodeEx param |
1578- fwdFlowInMayFlowThrough ( call , cc , _, summaryCtx , argAp , param , ap , _, config ) and
1579- pos = param .getPosition ( )
1580- )
1575+ fwdFlowInMayFlowThrough ( call , cc , _, summaryCtx , argAp , p , ap , _, config )
15811576 }
15821577
15831578 pragma [ nomagic]
@@ -1602,8 +1597,8 @@ private module MkStage<StageSig PrevStage> {
16021597 Ap ap , Configuration config
16031598 ) {
16041599 exists ( boolean allowsFieldFlow , ApApprox argApa , ApApprox apa |
1605- fwdFlowRetFromArg ( pragma [ only_bind_into ] ( ret ) , state , pragma [ only_bind_into ] ( ccc ) , _ , p ,
1606- argAp , pragma [ only_bind_into ] ( argApa ) , ap , pragma [ only_bind_into ] ( apa ) , config ) and
1600+ fwdFlowRetFromArg ( pragma [ only_bind_into ] ( ret ) , state , pragma [ only_bind_into ] ( ccc ) , p , argAp ,
1601+ pragma [ only_bind_into ] ( argApa ) , ap , pragma [ only_bind_into ] ( apa ) , config ) and
16071602 kind = ret .getKind ( ) and
16081603 fwdFlowThroughOutOfCall ( _, ccc , ret , _, allowsFieldFlow , argApa , apa , config ) and
16091604 ( if allowsFieldFlow = false then ap instanceof ApNil else any ( ) )
@@ -1967,8 +1962,9 @@ private module MkStage<StageSig PrevStage> {
19671962 conscand = count ( TypedContent f0 , Ap ap | fwdConsCand ( f0 , ap , config ) ) and
19681963 states = count ( FlowState state | fwdFlow ( _, state , _, _, _, _, config ) ) and
19691964 tuples =
1970- count ( NodeEx n , FlowState state , Cc cc , ParameterPositionOption summaryCtx , ApOption argAp ,
1971- Ap ap | fwdFlow ( n , state , cc , summaryCtx , argAp , ap , config ) )
1965+ count ( NodeEx n , FlowState state , Cc cc , ParamNodeOption summaryCtx , ApOption argAp , Ap ap |
1966+ fwdFlow ( n , state , cc , summaryCtx , argAp , ap , config )
1967+ )
19721968 or
19731969 fwd = false and
19741970 nodes = count ( NodeEx node | revFlow ( node , _, _, _, _, config ) ) and
@@ -2823,13 +2819,12 @@ private Configuration unbindConf(Configuration conf) {
28232819
28242820pragma [ nomagic]
28252821private predicate nodeMayUseSummary0 (
2826- NodeEx n , DataFlowCallable c , ParameterPosition pos , FlowState state , AccessPathApprox apa ,
2827- Configuration config
2822+ NodeEx n , ParamNodeEx p , FlowState state , AccessPathApprox apa , Configuration config
28282823) {
28292824 exists ( AccessPathApprox apa0 |
2830- c = n . getEnclosingCallable ( ) and
2825+ Stage5 :: parameterMayFlowThrough ( p , _ , _ ) and
28312826 Stage5:: revFlow ( n , state , TReturnCtxMaybeFlowThrough ( _) , _, apa0 , config ) and
2832- Stage5:: fwdFlow ( n , state , any ( CallContextCall ccc ) , TParameterPositionSome ( pos ) ,
2827+ Stage5:: fwdFlow ( n , state , any ( CallContextCall ccc ) , TParamNodeSome ( p . asNode ( ) ) ,
28332828 TAccessPathApproxSome ( apa ) , apa0 , config )
28342829 )
28352830}
@@ -2838,10 +2833,9 @@ pragma[nomagic]
28382833private predicate nodeMayUseSummary (
28392834 NodeEx n , FlowState state , AccessPathApprox apa , Configuration config
28402835) {
2841- exists ( DataFlowCallable c , ParameterPosition pos , ParamNodeEx p |
2836+ exists ( ParamNodeEx p |
28422837 Stage5:: parameterMayFlowThrough ( p , apa , config ) and
2843- nodeMayUseSummary0 ( n , c , pos , state , apa , config ) and
2844- p .isParameterOf ( c , pos )
2838+ nodeMayUseSummary0 ( n , p , state , apa , config )
28452839 )
28462840}
28472841
0 commit comments