@@ -1555,16 +1555,20 @@ module MakeImpl<InputSig Lang> {
1555
1555
1556
1556
pragma [ nomagic]
1557
1557
predicate dataFlowTakenCallEdgeIn ( DataFlowCall call , DataFlowCallable c , boolean cc ) {
1558
- exists ( ParamNodeEx p , Cc outercc |
1559
- fwdFlowIn ( call , p , _, outercc , _, _, _, _, _, _, _) and
1558
+ exists ( ParamNodeEx p , Cc outercc , FlowState state , Cc innercc , Typ t , Ap ap |
1559
+ fwdFlowIn ( call , p , state , outercc , innercc , _, _, _, t , ap , _) and
1560
+ fwdFlow1 ( p , state , innercc , _, _, _, t , _, ap , _) and
1560
1561
c = p .getEnclosingCallable ( ) and
1561
1562
if outercc instanceof CcCall then cc = true else cc = false
1562
1563
)
1563
1564
}
1564
1565
1565
1566
pragma [ nomagic]
1566
1567
predicate dataFlowTakenCallEdgeOut ( DataFlowCall call , DataFlowCallable c ) {
1567
- fwdFlowOut ( call , c , _, _, _, _, _, _, _, _, _)
1568
+ exists ( NodeEx node , FlowState state , Cc cc , Typ t , Ap ap |
1569
+ fwdFlowOut ( call , c , node , state , cc , _, _, _, t , ap , _) and
1570
+ fwdFlow1 ( node , state , cc , _, _, _, t , _, ap , _)
1571
+ )
1568
1572
}
1569
1573
1570
1574
predicate dataFlowNonCallEntry ( DataFlowCallable c , boolean cc ) {
@@ -1585,12 +1589,12 @@ module MakeImpl<InputSig Lang> {
1585
1589
1586
1590
private module FwdTypeFlow = TypeFlow< FwdTypeFlowInput > ;
1587
1591
1588
- private predicate flowIntoCallApaValid (
1592
+ private predicate flowIntoCallApaTaken (
1589
1593
DataFlowCall call , DataFlowCallable c , ArgNodeEx arg , ParamNodeEx p ,
1590
1594
boolean allowsFieldFlow , ApApprox apa
1591
1595
) {
1592
1596
flowIntoCallApa ( call , c , arg , p , allowsFieldFlow , apa ) and
1593
- FwdTypeFlow :: typeFlowValidEdgeIn ( call , c , _)
1597
+ FwdTypeFlowInput :: dataFlowTakenCallEdgeIn ( call , c , _)
1594
1598
}
1595
1599
1596
1600
pragma [ nomagic]
@@ -1692,7 +1696,7 @@ module MakeImpl<InputSig Lang> {
1692
1696
exists ( ApApprox argApa , Typ argT |
1693
1697
returnFlowsThrough ( _, _, _, _, pragma [ only_bind_into ] ( p ) , pragma [ only_bind_into ] ( argT ) ,
1694
1698
pragma [ only_bind_into ] ( argAp ) , ap ) and
1695
- flowIntoCallApaValid ( call , _, pragma [ only_bind_into ] ( arg ) , p , allowsFieldFlow , argApa ) and
1699
+ flowIntoCallApaTaken ( call , _, pragma [ only_bind_into ] ( arg ) , p , allowsFieldFlow , argApa ) and
1696
1700
fwdFlow ( arg , _, _, _, _, _, pragma [ only_bind_into ] ( argT ) , pragma [ only_bind_into ] ( argAp ) ,
1697
1701
argApa ) and
1698
1702
if allowsFieldFlow = false then argAp instanceof ApNil else any ( )
@@ -1704,7 +1708,7 @@ module MakeImpl<InputSig Lang> {
1704
1708
DataFlowCall call , DataFlowCallable c , ArgNodeEx arg , ParamNodeEx p , Ap ap
1705
1709
) {
1706
1710
exists ( ApApprox apa , boolean allowsFieldFlow |
1707
- flowIntoCallApaValid ( call , c , arg , p , allowsFieldFlow , apa ) and
1711
+ flowIntoCallApaTaken ( call , c , arg , p , allowsFieldFlow , apa ) and
1708
1712
fwdFlow ( arg , _, _, _, _, _, _, ap , apa ) and
1709
1713
if allowsFieldFlow = false then ap instanceof ApNil else any ( )
1710
1714
)
@@ -1721,8 +1725,8 @@ module MakeImpl<InputSig Lang> {
1721
1725
pos = ret .getReturnPosition ( ) and
1722
1726
if allowsFieldFlow = false then ap instanceof ApNil else any ( )
1723
1727
|
1724
- FwdTypeFlow :: typeFlowValidEdgeIn ( call , c , _) or
1725
- FwdTypeFlow :: typeFlowValidEdgeOut ( call , c )
1728
+ FwdTypeFlowInput :: dataFlowTakenCallEdgeIn ( call , c , _) or
1729
+ FwdTypeFlowInput :: dataFlowTakenCallEdgeOut ( call , c )
1726
1730
)
1727
1731
}
1728
1732
0 commit comments