@@ -3460,7 +3460,7 @@ private predicate pathStep(
3460
3460
exists ( TypedContent tc | pathReadStep ( mid , node , ap .push ( tc ) , tc , cc ) ) and
3461
3461
sc = mid .getSummaryCtx ( )
3462
3462
or
3463
- pathIntoCallable ( mid , node , _, cc , sc , _) and ap = mid .getAp ( )
3463
+ pathIntoCallable ( mid , node , _, cc , sc , _, _ ) and ap = mid .getAp ( )
3464
3464
or
3465
3465
pathOutOfCallable ( mid , node , cc ) and ap = mid .getAp ( ) and sc instanceof SummaryCtxNone
3466
3466
or
@@ -3537,14 +3537,16 @@ private predicate pathOutOfCallable(PathNodeMid mid, NodeEx out, CallContext cc)
3537
3537
*/
3538
3538
pragma [ noinline]
3539
3539
private predicate pathIntoArg (
3540
- PathNodeMid mid , int i , CallContext cc , DataFlowCall call , AccessPath ap , AccessPathApprox apa
3540
+ PathNodeMid mid , int i , CallContext cc , DataFlowCall call , AccessPath ap , AccessPathApprox apa ,
3541
+ Configuration config
3541
3542
) {
3542
3543
exists ( ArgNode arg |
3543
3544
arg = mid .getNodeEx ( ) .asNode ( ) and
3544
3545
cc = mid .getCallContext ( ) and
3545
3546
arg .argumentOf ( call , i ) and
3546
3547
ap = mid .getAp ( ) and
3547
- apa = ap .getApprox ( )
3548
+ apa = ap .getApprox ( ) and
3549
+ config = mid .getConfiguration ( )
3548
3550
)
3549
3551
}
3550
3552
@@ -3561,9 +3563,9 @@ private predicate parameterCand(
3561
3563
pragma [ nomagic]
3562
3564
private predicate pathIntoCallable0 (
3563
3565
PathNodeMid mid , DataFlowCallable callable , int i , CallContext outercc , DataFlowCall call ,
3564
- AccessPath ap , AccessPathApprox apa
3566
+ AccessPath ap , AccessPathApprox apa , Configuration config
3565
3567
) {
3566
- pathIntoArg ( mid , i , outercc , call , ap , apa ) and
3568
+ pathIntoArg ( mid , i , outercc , call , ap , apa , config ) and
3567
3569
callable = resolveCall ( call , outercc )
3568
3570
}
3569
3571
@@ -3572,13 +3574,14 @@ private predicate pathIntoCallable0(
3572
3574
* before and after entering the callable are `outercc` and `innercc`,
3573
3575
* respectively.
3574
3576
*/
3577
+ pragma [ nomagic]
3575
3578
private predicate pathIntoCallable (
3576
3579
PathNodeMid mid , ParamNodeEx p , CallContext outercc , CallContextCall innercc , SummaryCtx sc ,
3577
- DataFlowCall call
3580
+ DataFlowCall call , Configuration config
3578
3581
) {
3579
3582
exists ( int i , DataFlowCallable callable , AccessPath ap , AccessPathApprox apa |
3580
- pathIntoCallable0 ( mid , callable , i , outercc , call , ap , apa ) and
3581
- parameterCand ( callable , i , apa , mid . getConfiguration ( ) ) and
3583
+ pathIntoCallable0 ( mid , callable , i , outercc , call , ap , apa , config ) and
3584
+ parameterCand ( callable , i , apa , config ) and
3582
3585
p .isParameterOf ( callable , i ) and
3583
3586
(
3584
3587
sc = TSummaryCtxSome ( p , ap )
@@ -3615,11 +3618,11 @@ private predicate paramFlowsThrough(
3615
3618
pragma [ nomagic]
3616
3619
private predicate pathThroughCallable0 (
3617
3620
DataFlowCall call , PathNodeMid mid , ReturnKindExt kind , CallContext cc , AccessPath ap ,
3618
- AccessPathApprox apa
3621
+ AccessPathApprox apa , Configuration config
3619
3622
) {
3620
3623
exists ( CallContext innercc , SummaryCtx sc |
3621
- pathIntoCallable ( mid , _, cc , innercc , sc , call ) and
3622
- paramFlowsThrough ( kind , innercc , sc , ap , apa , unbindConf ( mid . getConfiguration ( ) ) )
3624
+ pathIntoCallable ( mid , _, cc , innercc , sc , call , config ) and
3625
+ paramFlowsThrough ( kind , innercc , sc , ap , apa , config )
3623
3626
)
3624
3627
}
3625
3628
@@ -3629,9 +3632,9 @@ private predicate pathThroughCallable0(
3629
3632
*/
3630
3633
pragma [ noinline]
3631
3634
private predicate pathThroughCallable ( PathNodeMid mid , NodeEx out , CallContext cc , AccessPath ap ) {
3632
- exists ( DataFlowCall call , ReturnKindExt kind , AccessPathApprox apa |
3633
- pathThroughCallable0 ( call , mid , kind , cc , ap , apa ) and
3634
- out = getAnOutNodeFlow ( kind , call , apa , unbindConf ( mid . getConfiguration ( ) ) )
3635
+ exists ( DataFlowCall call , ReturnKindExt kind , AccessPathApprox apa , Configuration config |
3636
+ pathThroughCallable0 ( call , mid , kind , cc , ap , apa , config ) and
3637
+ out = getAnOutNodeFlow ( kind , call , apa , config )
3635
3638
)
3636
3639
}
3637
3640
@@ -3645,10 +3648,11 @@ private module Subpaths {
3645
3648
PathNode arg , ParamNodeEx par , SummaryCtxSome sc , CallContext innercc , ReturnKindExt kind ,
3646
3649
NodeEx out , AccessPath apout
3647
3650
) {
3648
- pathThroughCallable ( arg , out , _, pragma [ only_bind_into ] ( apout ) ) and
3649
- pathIntoCallable ( arg , par , _, innercc , sc , _) and
3650
- paramFlowsThrough ( kind , innercc , sc , pragma [ only_bind_into ] ( apout ) , _,
3651
- unbindConf ( arg .getConfiguration ( ) ) )
3651
+ exists ( Configuration config |
3652
+ pathThroughCallable ( arg , out , _, pragma [ only_bind_into ] ( apout ) ) and
3653
+ pathIntoCallable ( arg , par , _, innercc , sc , _, config ) and
3654
+ paramFlowsThrough ( kind , innercc , sc , pragma [ only_bind_into ] ( apout ) , _, unbindConf ( config ) )
3655
+ )
3652
3656
}
3653
3657
3654
3658
/**
0 commit comments