@@ -1428,26 +1428,18 @@ module MakeImpl<InputSig Lang> {
1428
1428
)
1429
1429
or
1430
1430
// flow into a callable
1431
- exists ( Typ t0 , TypOption origT0 , boolean inSummaryCtx |
1432
- fwdFlowIn ( node , apa , state , cc , t0 , origT0 , ap , inSummaryCtx )
1431
+ exists ( boolean inSummaryCtx |
1432
+ fwdFlowIn ( node , apa , state , cc , t , origT , ap , inSummaryCtx )
1433
1433
|
1434
1434
PrevStage:: parameterMayFlowThrough ( node , apa ) and
1435
1435
summaryCtx = TParamNodeSome ( node .asNode ( ) ) and
1436
1436
argT = ArgTypOption:: some ( toArgTyp ( t ) ) and
1437
- argAp = apSome ( ap ) and
1438
- // t = getNodeTyp(node) and
1439
- // if origT0.isNone() then origT.asSome() = t0 else origT = origT0
1440
- t = t0 and
1441
- origT = origT0
1437
+ argAp = apSome ( ap )
1442
1438
or
1443
- // t = t0 and
1444
- // origT = origT0
1445
1439
Param:: nodeMayFlowNotThrough ( node , apa ) and
1446
1440
summaryCtx = TParamNodeNone ( ) and
1447
1441
argT instanceof ArgTypOption:: None and
1448
1442
argAp = apNone ( ) and
1449
- t = t0 and
1450
- origT = origT0 and
1451
1443
inSummaryCtx = false
1452
1444
)
1453
1445
or
@@ -1459,12 +1451,12 @@ module MakeImpl<InputSig Lang> {
1459
1451
or
1460
1452
// flow through a callable
1461
1453
exists (
1462
- DataFlowCall call , CcCall ccc , ReturnKindExt kind , boolean allowsFieldFlow ,
1454
+ DataFlowCall call , CcCall ccc , RetNodeEx ret , boolean allowsFieldFlow ,
1463
1455
ApApprox innerArgApa
1464
1456
|
1465
- fwdFlowThrough ( call , cc , state , ccc , summaryCtx , argT , argAp , t , origT , ap , apa , kind ,
1457
+ fwdFlowThrough ( call , cc , state , ccc , summaryCtx , argT , argAp , t , origT , ap , apa , ret ,
1466
1458
innerArgApa ) and
1467
- flowThroughOutOfCall ( call , ccc , kind , node , allowsFieldFlow , innerArgApa , apa ) and
1459
+ flowThroughOutOfCall ( call , ccc , ret , _ , node , allowsFieldFlow , innerArgApa , apa ) and
1468
1460
if allowsFieldFlow = false then ap instanceof ApNil else any ( )
1469
1461
)
1470
1462
}
@@ -1944,30 +1936,14 @@ module MakeImpl<InputSig Lang> {
1944
1936
RetNodeEx ret , FlowState state , CcCall ccc , ParamNodeEx summaryCtx , ArgTyp argT , Ap argAp ,
1945
1937
ApApprox argApa , Typ t , TypOption origT , Ap ap , ApApprox apa
1946
1938
) {
1947
- exists ( ReturnKindExt kind |
1939
+ exists ( DataFlowCall call , ReturnKindExt kind , boolean allowsFieldFlow |
1948
1940
fwdFlow ( pragma [ only_bind_into ] ( ret ) , state , ccc ,
1949
1941
TParamNodeSome ( pragma [ only_bind_into ] ( summaryCtx .asNode ( ) ) ) , ArgTypOption:: some ( argT ) ,
1950
1942
pragma [ only_bind_into ] ( apSome ( argAp ) ) , t , origT , ap , pragma [ only_bind_into ] ( apa ) ) and
1951
- kind = ret .getKind ( ) and
1952
1943
parameterFlowThroughAllowed ( summaryCtx , kind ) and
1953
1944
argApa = getApprox ( argAp ) and
1954
- PrevStage:: returnMayFlowThrough ( ret , argApa , apa , kind )
1955
- )
1956
- }
1957
-
1958
- pragma [ nomagic]
1959
- private predicate fwdFlowRetFromArg1 (
1960
- ReturnKindExt kind , FlowState state , CcCall ccc , ParamNodeEx summaryCtx , ArgTyp argT ,
1961
- Ap argAp , ApApprox argApa , Typ t , TypOption origT , Ap ap , ApApprox apa
1962
- ) {
1963
- exists ( RetNodeEx ret |
1964
- fwdFlow ( pragma [ only_bind_into ] ( ret ) , state , ccc ,
1965
- TParamNodeSome ( pragma [ only_bind_into ] ( summaryCtx .asNode ( ) ) ) , ArgTypOption:: some ( argT ) ,
1966
- pragma [ only_bind_into ] ( apSome ( argAp ) ) , t , origT , ap , pragma [ only_bind_into ] ( apa ) ) and
1967
- kind = ret .getKind ( ) and
1968
- parameterFlowThroughAllowed ( summaryCtx , kind ) and
1969
- argApa = getApprox ( argAp ) and
1970
- PrevStage:: returnMayFlowThrough ( ret , argApa , apa , kind )
1945
+ flowThroughOutOfCall ( call , ccc , ret , kind , _, allowsFieldFlow , argApa , apa ) and
1946
+ if allowsFieldFlow = false then ap instanceof ApNil else any ( )
1971
1947
)
1972
1948
}
1973
1949
@@ -1984,26 +1960,13 @@ module MakeImpl<InputSig Lang> {
1984
1960
innerArgAp )
1985
1961
}
1986
1962
1987
- pragma [ inline]
1988
- private predicate fwdFlowThrough1 (
1989
- DataFlowCall call , Cc cc , FlowState state , CcCall ccc , ParamNodeOption summaryCtx ,
1990
- ArgTypOption argT , ApOption argAp , Typ t , TypOption origT , Ap ap , ApApprox apa ,
1991
- ReturnKindExt kind , ParamNodeEx innerSummaryCtx , ArgTyp innerArgT , Ap innerArgAp ,
1992
- ApApprox innerArgApa
1993
- ) {
1994
- fwdFlowRetFromArg1 ( kind , state , ccc , innerSummaryCtx , innerArgT , innerArgAp , innerArgApa ,
1995
- t , origT , ap , apa ) and
1996
- fwdFlowIsEntered ( call , cc , ccc , summaryCtx , argT , argAp , innerSummaryCtx , innerArgT ,
1997
- innerArgAp )
1998
- }
1999
-
2000
1963
pragma [ nomagic]
2001
1964
private predicate fwdFlowThrough (
2002
1965
DataFlowCall call , Cc cc , FlowState state , CcCall ccc , ParamNodeOption summaryCtx ,
2003
1966
ArgTypOption argT , ApOption argAp , Typ t , TypOption origT , Ap ap , ApApprox apa ,
2004
- ReturnKindExt kind , ApApprox innerArgApa
1967
+ RetNodeEx ret , ApApprox innerArgApa
2005
1968
) {
2006
- fwdFlowThrough1 ( call , cc , state , ccc , summaryCtx , argT , argAp , t , origT , ap , apa , kind , _,
1969
+ fwdFlowThrough0 ( call , cc , state , ccc , summaryCtx , argT , argAp , t , origT , ap , apa , ret , _,
2007
1970
_, _, innerArgApa )
2008
1971
}
2009
1972
@@ -2022,8 +1985,10 @@ module MakeImpl<InputSig Lang> {
2022
1985
DataFlowCall call , Cc cc , CcCall innerCc , ParamNodeOption summaryCtx , ArgTypOption argT ,
2023
1986
ApOption argAp , ParamNodeEx p , ArgTyp t , Ap ap
2024
1987
) {
2025
- FwdFlowIn< FwdFlowThroughRestriction > :: fwdFlowIn ( call , _, p , _, cc , innerCc , summaryCtx ,
2026
- argT , argAp , any ( Typ t0 | t = toArgTyp ( t0 ) ) , _, ap , _, _)
1988
+ exists ( ApApprox apa |
1989
+ FwdFlowIn< FwdFlowThroughRestriction > :: fwdFlowIn ( call , _, p , _, cc , innerCc , summaryCtx ,
1990
+ argT , argAp , any ( Typ t0 | t = toArgTyp ( t0 ) ) , _, ap , apa , _)
1991
+ )
2027
1992
}
2028
1993
2029
1994
pragma [ nomagic]
0 commit comments