@@ -3460,7 +3460,7 @@ private predicate pathStep(
34603460 exists ( TypedContent tc | pathReadStep ( mid , node , ap .push ( tc ) , tc , cc ) ) and
34613461 sc = mid .getSummaryCtx ( )
34623462 or
3463- pathIntoCallable ( mid , node , _, cc , sc , _) and ap = mid .getAp ( )
3463+ pathIntoCallable ( mid , node , _, cc , sc , _, _ ) and ap = mid .getAp ( )
34643464 or
34653465 pathOutOfCallable ( mid , node , cc ) and ap = mid .getAp ( ) and sc instanceof SummaryCtxNone
34663466 or
@@ -3537,14 +3537,16 @@ private predicate pathOutOfCallable(PathNodeMid mid, NodeEx out, CallContext cc)
35373537 */
35383538pragma [ noinline]
35393539private 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
35413542) {
35423543 exists ( ArgNode arg |
35433544 arg = mid .getNodeEx ( ) .asNode ( ) and
35443545 cc = mid .getCallContext ( ) and
35453546 arg .argumentOf ( call , i ) and
35463547 ap = mid .getAp ( ) and
3547- apa = ap .getApprox ( )
3548+ apa = ap .getApprox ( ) and
3549+ config = mid .getConfiguration ( )
35483550 )
35493551}
35503552
@@ -3561,9 +3563,9 @@ private predicate parameterCand(
35613563pragma [ nomagic]
35623564private predicate pathIntoCallable0 (
35633565 PathNodeMid mid , DataFlowCallable callable , int i , CallContext outercc , DataFlowCall call ,
3564- AccessPath ap , AccessPathApprox apa
3566+ AccessPath ap , AccessPathApprox apa , Configuration config
35653567) {
3566- pathIntoArg ( mid , i , outercc , call , ap , apa ) and
3568+ pathIntoArg ( mid , i , outercc , call , ap , apa , config ) and
35673569 callable = resolveCall ( call , outercc )
35683570}
35693571
@@ -3572,13 +3574,14 @@ private predicate pathIntoCallable0(
35723574 * before and after entering the callable are `outercc` and `innercc`,
35733575 * respectively.
35743576 */
3577+ pragma [ nomagic]
35753578private predicate pathIntoCallable (
35763579 PathNodeMid mid , ParamNodeEx p , CallContext outercc , CallContextCall innercc , SummaryCtx sc ,
3577- DataFlowCall call
3580+ DataFlowCall call , Configuration config
35783581) {
35793582 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
35823585 p .isParameterOf ( callable , i ) and
35833586 (
35843587 sc = TSummaryCtxSome ( p , ap )
@@ -3615,11 +3618,11 @@ private predicate paramFlowsThrough(
36153618pragma [ nomagic]
36163619private predicate pathThroughCallable0 (
36173620 DataFlowCall call , PathNodeMid mid , ReturnKindExt kind , CallContext cc , AccessPath ap ,
3618- AccessPathApprox apa
3621+ AccessPathApprox apa , Configuration config
36193622) {
36203623 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 )
36233626 )
36243627}
36253628
@@ -3629,9 +3632,9 @@ private predicate pathThroughCallable0(
36293632 */
36303633pragma [ noinline]
36313634private 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 )
36353638 )
36363639}
36373640
@@ -3645,10 +3648,11 @@ private module Subpaths {
36453648 PathNode arg , ParamNodeEx par , SummaryCtxSome sc , CallContext innercc , ReturnKindExt kind ,
36463649 NodeEx out , AccessPath apout
36473650 ) {
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+ )
36523656 }
36533657
36543658 /**
0 commit comments