@@ -942,11 +942,9 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
942942 }
943943
944944 pragma [ nomagic]
945- predicate returnMayFlowThrough ( RetNodeEx ret , Ap argAp , Ap ap , ReturnKindExt kind ) {
945+ predicate returnMayFlowThrough ( RetNodeEx ret , ReturnKindExt kind ) {
946946 throughFlowNodeCand ( ret ) and
947- kind = ret .getKind ( ) and
948- exists ( argAp ) and
949- exists ( ap )
947+ kind = ret .getKind ( )
950948 }
951949
952950 pragma [ nomagic]
@@ -969,19 +967,18 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
969967
970968 predicate callEdgeReturn (
971969 DataFlowCall call , DataFlowCallable c , RetNodeEx ret , ReturnKindExt kind , NodeEx out ,
972- boolean allowsFieldFlow , Ap ap
970+ boolean allowsFieldFlow
973971 ) {
974972 flowOutOfCallNodeCand1 ( call , ret , kind , out , allowsFieldFlow ) and
975- c = ret .getEnclosingCallable ( ) and
976- exists ( ap )
973+ c = ret .getEnclosingCallable ( )
977974 }
978975
979976 predicate relevantCallEdgeIn ( DataFlowCall call , DataFlowCallable c ) {
980977 callEdgeArgParam ( call , c , _, _, _, _)
981978 }
982979
983980 predicate relevantCallEdgeOut ( DataFlowCall call , DataFlowCallable c ) {
984- callEdgeReturn ( call , c , _, _, _, _, _ )
981+ callEdgeReturn ( call , c , _, _, _, _)
985982 }
986983
987984 additional predicate stats (
@@ -1004,7 +1001,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
10041001 calledges =
10051002 count ( DataFlowCall call , DataFlowCallable c |
10061003 callEdgeArgParam ( call , c , _, _, _, _) or
1007- callEdgeReturn ( call , c , _, _, _, _, _ )
1004+ callEdgeReturn ( call , c , _, _, _, _)
10081005 )
10091006 }
10101007 /* End: Stage 1 logic. */
@@ -1287,7 +1284,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
12871284
12881285 predicate parameterMayFlowThrough ( ParamNodeEx p , Ap ap ) ;
12891286
1290- predicate returnMayFlowThrough ( RetNodeEx ret , Ap argAp , Ap ap , ReturnKindExt kind ) ;
1287+ predicate returnMayFlowThrough ( RetNodeEx ret , ReturnKindExt kind ) ;
12911288
12921289 predicate storeStepCand (
12931290 NodeEx node1 , Ap ap1 , Content c , NodeEx node2 , DataFlowType contentType ,
@@ -1303,7 +1300,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
13031300
13041301 predicate callEdgeReturn (
13051302 DataFlowCall call , DataFlowCallable c , RetNodeEx ret , ReturnKindExt kind , NodeEx out ,
1306- boolean allowsFieldFlow , Ap ap
1303+ boolean allowsFieldFlow
13071304 ) ;
13081305
13091306 predicate relevantCallEdgeIn ( DataFlowCall call , DataFlowCallable c ) ;
@@ -1437,13 +1434,12 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
14371434
14381435 pragma [ nomagic]
14391436 private predicate flowThroughOutOfCall (
1440- DataFlowCall call , CcCall ccc , RetNodeEx ret , NodeEx out , boolean allowsFieldFlow ,
1441- ApApprox argApa , ApApprox apa
1437+ DataFlowCall call , CcCall ccc , RetNodeEx ret , NodeEx out , boolean allowsFieldFlow
14421438 ) {
14431439 exists ( ReturnKindExt kind |
1444- PrevStage:: callEdgeReturn ( call , _, ret , kind , out , allowsFieldFlow , apa ) and
1440+ PrevStage:: callEdgeReturn ( call , _, ret , kind , out , allowsFieldFlow ) and
14451441 PrevStage:: callMayFlowThroughRev ( call ) and
1446- PrevStage:: returnMayFlowThrough ( ret , argApa , apa , kind ) and
1442+ PrevStage:: returnMayFlowThrough ( ret , kind ) and
14471443 matchesCall ( ccc , call )
14481444 )
14491445 }
@@ -1560,12 +1556,9 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
15601556 fwdFlowOut ( _, _, node , state , cc , summaryCtx , t , ap , apa , stored )
15611557 or
15621558 // flow through a callable
1563- exists (
1564- DataFlowCall call , CcCall ccc , RetNodeEx ret , boolean allowsFieldFlow ,
1565- ApApprox innerArgApa
1566- |
1567- fwdFlowThrough ( call , cc , state , ccc , summaryCtx , t , ap , apa , stored , ret , innerArgApa ) and
1568- flowThroughOutOfCall ( call , ccc , ret , node , allowsFieldFlow , innerArgApa , apa ) and
1559+ exists ( DataFlowCall call , CcCall ccc , RetNodeEx ret , boolean allowsFieldFlow |
1560+ fwdFlowThrough ( call , cc , state , ccc , summaryCtx , t , ap , apa , stored , ret , _) and
1561+ flowThroughOutOfCall ( call , ccc , ret , node , allowsFieldFlow ) and
15691562 not inBarrier ( node , state ) and
15701563 if allowsFieldFlow = false then ap instanceof ApNil else any ( )
15711564 )
@@ -1925,7 +1918,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
19251918 DataFlowCallable c , CcNoCall ctx
19261919 ) {
19271920 result = viableImplCallContextReducedReverse ( c , ctx ) and
1928- PrevStage:: callEdgeReturn ( result , c , _, _, _, _, _ )
1921+ PrevStage:: callEdgeReturn ( result , c , _, _, _, _)
19291922 }
19301923
19311924 bindingset [ c, ctx]
@@ -1939,21 +1932,20 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
19391932 bindingset [ call]
19401933 pragma [ inline_late]
19411934 private predicate flowOutOfCallApaInlineLate (
1942- DataFlowCall call , DataFlowCallable c , RetNodeEx ret , NodeEx out , boolean allowsFieldFlow ,
1943- ApApprox apa
1935+ DataFlowCall call , DataFlowCallable c , RetNodeEx ret , NodeEx out , boolean allowsFieldFlow
19441936 ) {
1945- PrevStage:: callEdgeReturn ( call , c , ret , _, out , allowsFieldFlow , apa )
1937+ PrevStage:: callEdgeReturn ( call , c , ret , _, out , allowsFieldFlow )
19461938 }
19471939
1948- bindingset [ c, ret, apa , innercc]
1940+ bindingset [ c, ret, innercc]
19491941 pragma [ inline_late]
19501942 pragma [ noopt]
19511943 private predicate flowOutOfCallApaNotCallContextReduced (
19521944 DataFlowCall call , DataFlowCallable c , RetNodeEx ret , NodeEx out , boolean allowsFieldFlow ,
1953- ApApprox apa , CcNoCall innercc
1945+ CcNoCall innercc
19541946 ) {
19551947 viableImplNotCallContextReducedReverse ( innercc ) and
1956- PrevStage:: callEdgeReturn ( call , c , ret , _, out , allowsFieldFlow , apa )
1948+ PrevStage:: callEdgeReturn ( call , c , ret , _, out , allowsFieldFlow )
19571949 }
19581950
19591951 pragma [ nomagic]
@@ -1975,10 +1967,9 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
19751967 inner = ret .getEnclosingCallable ( ) and
19761968 (
19771969 call = viableImplCallContextReducedReverseInlineLate ( inner , innercc ) and
1978- flowOutOfCallApaInlineLate ( call , inner , ret , out , allowsFieldFlow , apa )
1970+ flowOutOfCallApaInlineLate ( call , inner , ret , out , allowsFieldFlow )
19791971 or
1980- flowOutOfCallApaNotCallContextReduced ( call , inner , ret , out , allowsFieldFlow , apa ,
1981- innercc )
1972+ flowOutOfCallApaNotCallContextReduced ( call , inner , ret , out , allowsFieldFlow , innercc )
19821973 )
19831974 }
19841975
@@ -2050,10 +2041,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
20502041 private predicate fwdFlow1Out (
20512042 NodeEx node , FlowState state , Cc cc , Typ t0 , Ap ap , TypOption stored
20522043 ) {
2053- exists ( ApApprox apa |
2054- fwdFlow1 ( node , state , cc , _, t0 , _, ap , apa , stored ) and
2055- PrevStage:: callEdgeReturn ( _, _, _, _, node , _, apa )
2056- )
2044+ fwdFlow1 ( node , state , cc , _, t0 , _, ap , _, stored ) and
2045+ PrevStage:: callEdgeReturn ( _, _, _, _, node , _)
20572046 }
20582047
20592048 pragma [ nomagic]
@@ -2097,15 +2086,14 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
20972086 ) {
20982087 exists ( ReturnKindExt kind , ParamNodeEx p , Ap argAp |
20992088 instanceofCcCall ( ccc ) and
2100- fwdFlow ( pragma [ only_bind_into ] ( ret ) , state , ccc , summaryCtx , t , ap ,
2101- pragma [ only_bind_into ] ( apa ) , stored ) and
2089+ fwdFlow ( pragma [ only_bind_into ] ( ret ) , state , ccc , summaryCtx , t , ap , apa , stored ) and
21022090 summaryCtx =
21032091 TSummaryCtxSome ( pragma [ only_bind_into ] ( p ) , _, _, pragma [ only_bind_into ] ( argAp ) , _) and
21042092 not outBarrier ( ret , state ) and
21052093 kind = ret .getKind ( ) and
21062094 parameterFlowThroughAllowed ( p , kind ) and
21072095 argApa = getApprox ( argAp ) and
2108- PrevStage:: returnMayFlowThrough ( ret , pragma [ only_bind_into ] ( argApa ) , apa , kind )
2096+ PrevStage:: returnMayFlowThrough ( ret , kind )
21092097 )
21102098 }
21112099
@@ -2178,10 +2166,10 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
21782166 RetNodeEx ret , ReturnPosition pos , FlowState state , CcCall ccc , ParamNodeEx p , Typ argT ,
21792167 Ap argAp , ApApprox argApa , TypOption argStored , Ap ap
21802168 ) {
2181- exists ( DataFlowCall call , ApApprox apa , boolean allowsFieldFlow |
2182- returnFlowsThrough0 ( call , state , ccc , ap , apa , ret ,
2169+ exists ( DataFlowCall call , boolean allowsFieldFlow |
2170+ returnFlowsThrough0 ( call , state , ccc , ap , _ , ret ,
21832171 TSummaryCtxSome ( p , _, argT , argAp , argStored ) , argApa ) and
2184- flowThroughOutOfCall ( call , ccc , ret , _, allowsFieldFlow , argApa , apa ) and
2172+ flowThroughOutOfCall ( call , ccc , ret , _, allowsFieldFlow ) and
21852173 pos = ret .getReturnPosition ( ) and
21862174 if allowsFieldFlow = false then ap instanceof ApNil else any ( )
21872175 )
@@ -2216,14 +2204,13 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
22162204 pragma [ nomagic]
22172205 private predicate flowOutOfCallAp (
22182206 DataFlowCall call , DataFlowCallable c , RetNodeEx ret , ReturnPosition pos , NodeEx out ,
2219- Ap ap
2207+ Ap ap , boolean allowsFieldFlow
22202208 ) {
2221- exists ( ApApprox apa , boolean allowsFieldFlow |
2222- PrevStage:: callEdgeReturn ( call , c , ret , _, out , allowsFieldFlow , apa ) and
2223- fwdFlow ( ret , _, _, _, _, ap , apa , _) and
2224- pos = ret .getReturnPosition ( ) and
2225- if allowsFieldFlow = false then ap instanceof ApNil else any ( )
2226- |
2209+ PrevStage:: callEdgeReturn ( call , c , ret , _, out , allowsFieldFlow ) and
2210+ fwdFlow ( ret , _, _, _, _, ap , _, _) and
2211+ pos = ret .getReturnPosition ( ) and
2212+ ( if allowsFieldFlow = false then ap instanceof ApNil else any ( ) ) and
2213+ (
22272214 // both directions are needed for flow-through
22282215 FwdTypeFlowInput:: dataFlowTakenCallEdgeIn ( call , c , _) or
22292216 FwdTypeFlowInput:: dataFlowTakenCallEdgeOut ( call , c )
@@ -2356,7 +2343,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
23562343 predicate enableTypeFlow = Param:: enableTypeFlow / 0 ;
23572344
23582345 predicate relevantCallEdgeIn ( DataFlowCall call , DataFlowCallable c ) {
2359- flowOutOfCallAp ( call , c , _, _, _, _)
2346+ flowOutOfCallAp ( call , c , _, _, _, _, _ )
23602347 }
23612348
23622349 predicate relevantCallEdgeOut ( DataFlowCall call , DataFlowCallable c ) {
@@ -2407,7 +2394,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
24072394 DataFlowCall call , RetNodeEx ret , ReturnPosition pos , NodeEx out , Ap ap , boolean cc
24082395 ) {
24092396 exists ( DataFlowCallable c |
2410- flowOutOfCallAp ( call , c , ret , pos , out , ap ) and
2397+ flowOutOfCallAp ( call , c , ret , pos , out , ap , _ ) and
24112398 RevTypeFlow:: typeFlowValidEdgeIn ( call , c , cc )
24122399 )
24132400 }
@@ -2559,8 +2546,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
25592546 }
25602547
25612548 pragma [ nomagic]
2562- predicate returnMayFlowThrough ( RetNodeEx ret , Ap argAp , Ap ap , ReturnKindExt kind ) {
2563- exists ( ParamNodeEx p , ReturnPosition pos |
2549+ predicate returnMayFlowThrough ( RetNodeEx ret , ReturnKindExt kind ) {
2550+ exists ( ParamNodeEx p , ReturnPosition pos , Ap argAp , Ap ap |
25642551 returnFlowsThrough ( ret , pos , _, _, p , _, argAp , _, _, ap ) and
25652552 parameterFlowsThroughRev ( p , argAp , pos , ap ) and
25662553 kind = pos .getKind ( )
@@ -2607,14 +2594,13 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
26072594
26082595 predicate callEdgeReturn (
26092596 DataFlowCall call , DataFlowCallable c , RetNodeEx ret , ReturnKindExt kind , NodeEx out ,
2610- boolean allowsFieldFlow , Ap ap
2597+ boolean allowsFieldFlow
26112598 ) {
2612- exists ( FlowState state , ReturnPosition pos |
2613- flowOutOfCallAp ( call , c , ret , pos , out , ap ) and
2599+ exists ( FlowState state , ReturnPosition pos , Ap ap |
2600+ flowOutOfCallAp ( call , c , ret , pos , out , ap , allowsFieldFlow ) and
26142601 revFlow ( ret , pragma [ only_bind_into ] ( state ) , pragma [ only_bind_into ] ( ap ) ) and
26152602 revFlow ( out , pragma [ only_bind_into ] ( state ) , pragma [ only_bind_into ] ( ap ) ) and
26162603 kind = pos .getKind ( ) and
2617- allowsFieldFlow = true and
26182604 RevTypeFlowInput:: dataFlowTakenCallEdgeIn ( call , c , _)
26192605 )
26202606 }
@@ -2624,7 +2610,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
26242610 }
26252611
26262612 predicate relevantCallEdgeOut ( DataFlowCall call , DataFlowCallable c ) {
2627- callEdgeReturn ( call , c , _, _, _, _, _ )
2613+ callEdgeReturn ( call , c , _, _, _, _)
26282614 }
26292615
26302616 /** Holds if `node1` can step to `node2` in one or more local steps. */
@@ -2719,7 +2705,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
27192705 callEdgeArgParam ( _, _, node , next , _, ap ) and
27202706 apNext = ap
27212707 or
2722- callEdgeReturn ( _, _, node , _, next , _, ap ) and
2708+ callEdgeReturn ( _, _, node , _, next , _) and
27232709 apNext = ap
27242710 or
27252711 storeStepCand ( node , _, _, next , _, _)
@@ -3206,13 +3192,10 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
32063192 PathNodeImpl pn1 , PathNodeImpl pn2 , PathNodeImpl pn3 , NodeEx node , Cc cc ,
32073193 FlowState state , SummaryCtx summaryCtx , Typ t , Ap ap , TypOption stored
32083194 ) {
3209- exists (
3210- DataFlowCall call , CcCall ccc , RetNodeEx ret , boolean allowsFieldFlow ,
3211- ApApprox innerArgApa , ApApprox apa
3212- |
3213- fwdFlowThroughStep1 ( pn1 , pn2 , pn3 , call , cc , state , ccc , summaryCtx , t , ap , apa ,
3214- stored , ret , innerArgApa ) and
3215- flowThroughOutOfCall ( call , ccc , ret , node , allowsFieldFlow , innerArgApa , apa ) and
3195+ exists ( DataFlowCall call , CcCall ccc , RetNodeEx ret , boolean allowsFieldFlow |
3196+ fwdFlowThroughStep1 ( pn1 , pn2 , pn3 , call , cc , state , ccc , summaryCtx , t , ap , _, stored ,
3197+ ret , _) and
3198+ flowThroughOutOfCall ( call , ccc , ret , node , allowsFieldFlow ) and
32163199 not inBarrier ( node , state ) and
32173200 if allowsFieldFlow = false then ap instanceof ApNil else any ( )
32183201 )
0 commit comments