@@ -512,7 +512,7 @@ private module Stage1 {
512
512
513
513
pragma [ nomagic]
514
514
predicate viableParamArgNodeCandFwd1 (
515
- DataFlowCall call , ParameterNode p , ArgumentNodeExt arg , Configuration config
515
+ DataFlowCall call , ParameterNodeExt p , ArgumentNodeExt arg , Configuration config
516
516
) {
517
517
viableParamArg ( call , p , arg ) and
518
518
fwdFlow ( arg , config )
@@ -522,7 +522,7 @@ private module Stage1 {
522
522
private predicate revFlowIn (
523
523
DataFlowCall call , ArgumentNodeExt arg , boolean toReturn , Configuration config
524
524
) {
525
- exists ( ParameterNode p |
525
+ exists ( ParameterNodeExt p |
526
526
revFlow ( p , toReturn , config ) and
527
527
viableParamArgNodeCandFwd1 ( call , p , arg , config )
528
528
)
@@ -594,7 +594,9 @@ private module Stage1 {
594
594
* Holds if flow may enter through `p` and reach a return node making `p` a
595
595
* candidate for the origin of a summary.
596
596
*/
597
- predicate parameterMayFlowThrough ( ParameterNode p , DataFlowCallable c , Ap ap , Configuration config ) {
597
+ predicate parameterMayFlowThrough (
598
+ ParameterNodeExt p , DataFlowCallable c , Ap ap , Configuration config
599
+ ) {
598
600
exists ( ReturnKindExt kind |
599
601
throughFlowNodeCand ( p , config ) and
600
602
returnFlowCallableNodeCand ( c , kind , config ) and
@@ -660,7 +662,7 @@ private predicate flowOutOfCallNodeCand1(
660
662
661
663
pragma [ nomagic]
662
664
private predicate viableParamArgNodeCand1 (
663
- DataFlowCall call , ParameterNode p , ArgumentNodeExt arg , Configuration config
665
+ DataFlowCall call , ParameterNodeExt p , ArgumentNodeExt arg , Configuration config
664
666
) {
665
667
Stage1:: viableParamArgNodeCandFwd1 ( call , p , arg , config ) and
666
668
Stage1:: revFlow ( arg , config )
@@ -672,7 +674,7 @@ private predicate viableParamArgNodeCand1(
672
674
*/
673
675
pragma [ nomagic]
674
676
private predicate flowIntoCallNodeCand1 (
675
- DataFlowCall call , ArgumentNodeExt arg , ParameterNode p , Configuration config
677
+ DataFlowCall call , ArgumentNodeExt arg , ParameterNodeExt p , Configuration config
676
678
) {
677
679
viableParamArgNodeCand1 ( call , p , arg , config ) and
678
680
Stage1:: revFlow ( p , config ) and
@@ -732,7 +734,7 @@ private predicate flowOutOfCallNodeCand1(
732
734
*/
733
735
pragma [ nomagic]
734
736
private predicate flowIntoCallNodeCand1 (
735
- DataFlowCall call , ArgumentNodeExt arg , ParameterNode p , boolean allowsFieldFlow ,
737
+ DataFlowCall call , ArgumentNodeExt arg , ParameterNodeExt p , boolean allowsFieldFlow ,
736
738
Configuration config
737
739
) {
738
740
flowIntoCallNodeCand1 ( call , arg , p , config ) and
@@ -941,7 +943,7 @@ private module Stage2 {
941
943
942
944
pragma [ nomagic]
943
945
private predicate fwdFlowIn (
944
- DataFlowCall call , ParameterNode p , Cc outercc , Cc innercc , ApOption argAp , Ap ap ,
946
+ DataFlowCall call , ParameterNodeExt p , Cc outercc , Cc innercc , ApOption argAp , Ap ap ,
945
947
Configuration config
946
948
) {
947
949
exists ( ArgumentNodeExt arg , boolean allowsFieldFlow |
@@ -989,7 +991,7 @@ private module Stage2 {
989
991
private predicate fwdFlowIsEntered (
990
992
DataFlowCall call , Cc cc , ApOption argAp , Ap ap , Configuration config
991
993
) {
992
- exists ( ParameterNode p |
994
+ exists ( ParameterNodeExt p |
993
995
fwdFlowIn ( call , p , cc , _, argAp , ap , config ) and
994
996
PrevStage:: parameterMayFlowThrough ( p , _, getApprox ( ap ) , config )
995
997
)
@@ -1133,7 +1135,7 @@ private module Stage2 {
1133
1135
DataFlowCall call , ArgumentNodeExt arg , boolean toReturn , ApOption returnAp , Ap ap ,
1134
1136
Configuration config
1135
1137
) {
1136
- exists ( ParameterNode p , boolean allowsFieldFlow |
1138
+ exists ( ParameterNodeExt p , boolean allowsFieldFlow |
1137
1139
revFlow ( p , toReturn , returnAp , ap , config ) and
1138
1140
flowIntoCall ( call , arg , p , allowsFieldFlow , config )
1139
1141
|
@@ -1196,13 +1198,15 @@ private module Stage2 {
1196
1198
1197
1199
pragma [ noinline]
1198
1200
private predicate parameterFlow (
1199
- ParameterNode p , Ap ap , Ap ap0 , DataFlowCallable c , Configuration config
1201
+ ParameterNodeExt p , Ap ap , Ap ap0 , DataFlowCallable c , Configuration config
1200
1202
) {
1201
1203
revFlow ( p , true , apSome ( ap0 ) , ap , config ) and
1202
1204
c = getNodeEnclosingCallable ( p )
1203
1205
}
1204
1206
1205
- predicate parameterMayFlowThrough ( ParameterNode p , DataFlowCallable c , Ap ap , Configuration config ) {
1207
+ predicate parameterMayFlowThrough (
1208
+ ParameterNodeExt p , DataFlowCallable c , Ap ap , Configuration config
1209
+ ) {
1206
1210
exists ( ReturnNodeExt ret , Ap ap0 , ReturnKindExt kind , int pos |
1207
1211
parameterFlow ( p , ap , ap0 , c , config ) and
1208
1212
c = getNodeEnclosingCallable ( ret ) and
@@ -1242,7 +1246,7 @@ private predicate flowOutOfCallNodeCand2(
1242
1246
1243
1247
pragma [ nomagic]
1244
1248
private predicate flowIntoCallNodeCand2 (
1245
- DataFlowCall call , ArgumentNodeExt node1 , ParameterNode node2 , boolean allowsFieldFlow ,
1249
+ DataFlowCall call , ArgumentNodeExt node1 , ParameterNodeExt node2 , boolean allowsFieldFlow ,
1246
1250
Configuration config
1247
1251
) {
1248
1252
flowIntoCallNodeCand1 ( call , node1 , node2 , allowsFieldFlow , config ) and
@@ -1272,7 +1276,7 @@ private module LocalFlowBigStep {
1272
1276
config .isSource ( node ) or
1273
1277
jumpStep ( _, node , config ) or
1274
1278
additionalJumpStep ( _, node , config ) or
1275
- node instanceof ParameterNode or
1279
+ node instanceof ParameterNodeExt or
1276
1280
node instanceof OutNodeExt or
1277
1281
store ( _, _, node , _) or
1278
1282
read ( _, _, node ) or
@@ -1582,7 +1586,7 @@ private module Stage3 {
1582
1586
1583
1587
pragma [ nomagic]
1584
1588
private predicate fwdFlowIn (
1585
- DataFlowCall call , ParameterNode p , Cc outercc , Cc innercc , ApOption argAp , Ap ap ,
1589
+ DataFlowCall call , ParameterNodeExt p , Cc outercc , Cc innercc , ApOption argAp , Ap ap ,
1586
1590
Configuration config
1587
1591
) {
1588
1592
exists ( ArgumentNodeExt arg , boolean allowsFieldFlow |
@@ -1630,7 +1634,7 @@ private module Stage3 {
1630
1634
private predicate fwdFlowIsEntered (
1631
1635
DataFlowCall call , Cc cc , ApOption argAp , Ap ap , Configuration config
1632
1636
) {
1633
- exists ( ParameterNode p |
1637
+ exists ( ParameterNodeExt p |
1634
1638
fwdFlowIn ( call , p , cc , _, argAp , ap , config ) and
1635
1639
PrevStage:: parameterMayFlowThrough ( p , _, unbindApa ( getApprox ( ap ) ) , config )
1636
1640
)
@@ -1774,7 +1778,7 @@ private module Stage3 {
1774
1778
DataFlowCall call , ArgumentNodeExt arg , boolean toReturn , ApOption returnAp , Ap ap ,
1775
1779
Configuration config
1776
1780
) {
1777
- exists ( ParameterNode p , boolean allowsFieldFlow |
1781
+ exists ( ParameterNodeExt p , boolean allowsFieldFlow |
1778
1782
revFlow ( p , toReturn , returnAp , ap , config ) and
1779
1783
flowIntoCall ( call , arg , p , allowsFieldFlow , config )
1780
1784
|
@@ -1837,13 +1841,15 @@ private module Stage3 {
1837
1841
1838
1842
pragma [ noinline]
1839
1843
private predicate parameterFlow (
1840
- ParameterNode p , Ap ap , Ap ap0 , DataFlowCallable c , Configuration config
1844
+ ParameterNodeExt p , Ap ap , Ap ap0 , DataFlowCallable c , Configuration config
1841
1845
) {
1842
1846
revFlow ( p , true , apSome ( ap0 ) , ap , config ) and
1843
1847
c = getNodeEnclosingCallable ( p )
1844
1848
}
1845
1849
1846
- predicate parameterMayFlowThrough ( ParameterNode p , DataFlowCallable c , Ap ap , Configuration config ) {
1850
+ predicate parameterMayFlowThrough (
1851
+ ParameterNodeExt p , DataFlowCallable c , Ap ap , Configuration config
1852
+ ) {
1847
1853
exists ( ReturnNodeExt ret , Ap ap0 , ReturnKindExt kind , int pos |
1848
1854
parameterFlow ( p , ap , ap0 , c , config ) and
1849
1855
c = getNodeEnclosingCallable ( ret ) and
@@ -2154,7 +2160,7 @@ private module Stage4 {
2154
2160
2155
2161
pragma [ nomagic]
2156
2162
private predicate flowIntoCall (
2157
- DataFlowCall call , ArgumentNodeExt node1 , ParameterNode node2 , boolean allowsFieldFlow ,
2163
+ DataFlowCall call , ArgumentNodeExt node1 , ParameterNodeExt node2 , boolean allowsFieldFlow ,
2158
2164
Configuration config
2159
2165
) {
2160
2166
flowIntoCallNodeCand2 ( call , node1 , node2 , allowsFieldFlow , config ) and
@@ -2299,7 +2305,7 @@ private module Stage4 {
2299
2305
2300
2306
pragma [ nomagic]
2301
2307
private predicate fwdFlowIn (
2302
- DataFlowCall call , ParameterNode p , Cc outercc , Cc innercc , ApOption argAp , Ap ap ,
2308
+ DataFlowCall call , ParameterNodeExt p , Cc outercc , Cc innercc , ApOption argAp , Ap ap ,
2303
2309
Configuration config
2304
2310
) {
2305
2311
exists ( ArgumentNodeExt arg , boolean allowsFieldFlow |
@@ -2347,7 +2353,7 @@ private module Stage4 {
2347
2353
private predicate fwdFlowIsEntered (
2348
2354
DataFlowCall call , Cc cc , ApOption argAp , Ap ap , Configuration config
2349
2355
) {
2350
- exists ( ParameterNode p |
2356
+ exists ( ParameterNodeExt p |
2351
2357
fwdFlowIn ( call , p , cc , _, argAp , ap , config ) and
2352
2358
PrevStage:: parameterMayFlowThrough ( p , _, unbindApa ( getApprox ( ap ) ) , config )
2353
2359
)
@@ -2491,7 +2497,7 @@ private module Stage4 {
2491
2497
DataFlowCall call , ArgumentNodeExt arg , boolean toReturn , ApOption returnAp , Ap ap ,
2492
2498
Configuration config
2493
2499
) {
2494
- exists ( ParameterNode p , boolean allowsFieldFlow |
2500
+ exists ( ParameterNodeExt p , boolean allowsFieldFlow |
2495
2501
revFlow ( p , toReturn , returnAp , ap , config ) and
2496
2502
flowIntoCall ( call , arg , p , allowsFieldFlow , config )
2497
2503
|
@@ -2554,13 +2560,15 @@ private module Stage4 {
2554
2560
2555
2561
pragma [ noinline]
2556
2562
private predicate parameterFlow (
2557
- ParameterNode p , Ap ap , Ap ap0 , DataFlowCallable c , Configuration config
2563
+ ParameterNodeExt p , Ap ap , Ap ap0 , DataFlowCallable c , Configuration config
2558
2564
) {
2559
2565
revFlow ( p , true , apSome ( ap0 ) , ap , config ) and
2560
2566
c = getNodeEnclosingCallable ( p )
2561
2567
}
2562
2568
2563
- predicate parameterMayFlowThrough ( ParameterNode p , DataFlowCallable c , Ap ap , Configuration config ) {
2569
+ predicate parameterMayFlowThrough (
2570
+ ParameterNodeExt p , DataFlowCallable c , Ap ap , Configuration config
2571
+ ) {
2564
2572
exists ( ReturnNodeExt ret , Ap ap0 , ReturnKindExt kind , int pos |
2565
2573
parameterFlow ( p , ap , ap0 , c , config ) and
2566
2574
c = getNodeEnclosingCallable ( ret ) and
@@ -2605,7 +2613,7 @@ private predicate nodeMayUseSummary(Node n, AccessPathApprox apa, Configuration
2605
2613
2606
2614
private newtype TSummaryCtx =
2607
2615
TSummaryCtxNone ( ) or
2608
- TSummaryCtxSome ( ParameterNode p , AccessPath ap ) {
2616
+ TSummaryCtxSome ( ParameterNodeExt p , AccessPath ap ) {
2609
2617
Stage4:: parameterMayFlowThrough ( p , _, ap .getApprox ( ) , _)
2610
2618
}
2611
2619
@@ -2626,7 +2634,7 @@ private class SummaryCtxNone extends SummaryCtx, TSummaryCtxNone {
2626
2634
2627
2635
/** A summary context from which a flow summary can be generated. */
2628
2636
private class SummaryCtxSome extends SummaryCtx , TSummaryCtxSome {
2629
- private ParameterNode p ;
2637
+ private ParameterNodeExt p ;
2630
2638
private AccessPath ap ;
2631
2639
2632
2640
SummaryCtxSome ( ) { this = TSummaryCtxSome ( p , ap ) }
@@ -3247,7 +3255,7 @@ pragma[noinline]
3247
3255
private predicate parameterCand (
3248
3256
DataFlowCallable callable , int i , AccessPathApprox apa , Configuration config
3249
3257
) {
3250
- exists ( ParameterNode p |
3258
+ exists ( ParameterNodeExt p |
3251
3259
Stage4:: revFlow ( p , _, _, apa , config ) and
3252
3260
p .isParameterOf ( callable , i )
3253
3261
)
@@ -3271,7 +3279,7 @@ private predicate pathIntoCallable0(
3271
3279
* respectively.
3272
3280
*/
3273
3281
private predicate pathIntoCallable (
3274
- PathNodeMid mid , ParameterNode p , CallContext outercc , CallContextCall innercc , SummaryCtx sc ,
3282
+ PathNodeMid mid , ParameterNodeExt p , CallContext outercc , CallContextCall innercc , SummaryCtx sc ,
3275
3283
DataFlowCall call
3276
3284
) {
3277
3285
exists ( int i , DataFlowCallable callable , AccessPath ap |
@@ -3567,7 +3575,7 @@ private module FlowExploration {
3567
3575
3568
3576
private newtype TSummaryCtx1 =
3569
3577
TSummaryCtx1None ( ) or
3570
- TSummaryCtx1Param ( ParameterNode p )
3578
+ TSummaryCtx1Param ( ParameterNodeExt p )
3571
3579
3572
3580
private newtype TSummaryCtx2 =
3573
3581
TSummaryCtx2None ( ) or
@@ -3942,7 +3950,7 @@ private module FlowExploration {
3942
3950
}
3943
3951
3944
3952
private predicate partialPathIntoCallable (
3945
- PartialPathNodeFwd mid , ParameterNode p , CallContext outercc , CallContextCall innercc ,
3953
+ PartialPathNodeFwd mid , ParameterNodeExt p , CallContext outercc , CallContextCall innercc ,
3946
3954
TSummaryCtx1 sc1 , TSummaryCtx2 sc2 , DataFlowCall call , PartialAccessPath ap ,
3947
3955
Configuration config
3948
3956
) {
@@ -3979,7 +3987,7 @@ private module FlowExploration {
3979
3987
DataFlowCall call , PartialPathNodeFwd mid , ReturnKindExt kind , CallContext cc ,
3980
3988
PartialAccessPath ap , Configuration config
3981
3989
) {
3982
- exists ( ParameterNode p , CallContext innercc , TSummaryCtx1 sc1 , TSummaryCtx2 sc2 |
3990
+ exists ( ParameterNodeExt p , CallContext innercc , TSummaryCtx1 sc1 , TSummaryCtx2 sc2 |
3983
3991
partialPathIntoCallable ( mid , p , cc , innercc , sc1 , sc2 , call , _, config ) and
3984
3992
paramFlowsThroughInPartialPath ( kind , innercc , sc1 , sc2 , ap , config )
3985
3993
)
@@ -4036,7 +4044,7 @@ private module FlowExploration {
4036
4044
apConsRev ( ap , c , ap0 , config )
4037
4045
)
4038
4046
or
4039
- exists ( ParameterNode p |
4047
+ exists ( ParameterNodeExt p |
4040
4048
mid .getNode ( ) = p and
4041
4049
viableParamArg ( _, p , node ) and
4042
4050
sc1 = mid .getSummaryCtx1 ( ) and
@@ -4114,7 +4122,7 @@ private module FlowExploration {
4114
4122
int pos , TRevSummaryCtx1Some sc1 , TRevSummaryCtx2Some sc2 , RevPartialAccessPath ap ,
4115
4123
Configuration config
4116
4124
) {
4117
- exists ( PartialPathNodeRev mid , ParameterNode p |
4125
+ exists ( PartialPathNodeRev mid , ParameterNodeExt p |
4118
4126
mid .getNode ( ) = p and
4119
4127
p .isParameterOf ( _, pos ) and
4120
4128
sc1 = mid .getSummaryCtx1 ( ) and
0 commit comments