@@ -4357,7 +4357,27 @@ module MakeImpl<InputSig Lang> {
4357
4357
tftuples = - 1
4358
4358
}
4359
4359
4360
- module FlowExploration< explorationLimitSig / 0 explorationLimit> {
4360
+ private signature predicate flag ( ) ;
4361
+
4362
+ private predicate flagEnable ( ) { any ( ) }
4363
+
4364
+ private predicate flagDisable ( ) { none ( ) }
4365
+
4366
+ module FlowExplorationFwd< explorationLimitSig / 0 explorationLimit> {
4367
+ import FlowExploration< explorationLimit / 0 , flagEnable / 0 , flagDisable / 0 >
4368
+
4369
+ predicate partialFlow = partialFlowFwd / 3 ;
4370
+ }
4371
+
4372
+ module FlowExplorationRev< explorationLimitSig / 0 explorationLimit> {
4373
+ import FlowExploration< explorationLimit / 0 , flagDisable / 0 , flagEnable / 0 >
4374
+
4375
+ predicate partialFlow = partialFlowRev / 3 ;
4376
+ }
4377
+
4378
+ private module FlowExploration<
4379
+ explorationLimitSig / 0 explorationLimit, flag / 0 flagFwd, flag / 0 flagRev>
4380
+ {
4361
4381
private predicate callableStep ( DataFlowCallable c1 , DataFlowCallable c2 ) {
4362
4382
exists ( NodeEx node1 , NodeEx node2 |
4363
4383
jumpStepEx ( node1 , node2 )
@@ -4526,6 +4546,7 @@ module MakeImpl<InputSig Lang> {
4526
4546
NodeEx node , FlowState state , CallContext cc , TSummaryCtx1 sc1 , TSummaryCtx2 sc2 ,
4527
4547
TSummaryCtx3 sc3 , TSummaryCtx4 sc4 , DataFlowType t , PartialAccessPath ap
4528
4548
) {
4549
+ flagFwd ( ) and
4529
4550
sourceNode ( node , state ) and
4530
4551
cc instanceof CallContextAny and
4531
4552
sc1 = TSummaryCtx1None ( ) and
@@ -4543,6 +4564,7 @@ module MakeImpl<InputSig Lang> {
4543
4564
NodeEx node , FlowState state , TRevSummaryCtx1 sc1 , TRevSummaryCtx2 sc2 ,
4544
4565
TRevSummaryCtx3 sc3 , PartialAccessPath ap
4545
4566
) {
4567
+ flagRev ( ) and
4546
4568
revSinkNode ( node , state ) and
4547
4569
sc1 = TRevSummaryCtx1None ( ) and
4548
4570
sc2 = TRevSummaryCtx2None ( ) and
@@ -5223,7 +5245,7 @@ module MakeImpl<InputSig Lang> {
5223
5245
)
5224
5246
}
5225
5247
5226
- private predicate partialFlow ( PartialPathNode source , PartialPathNode node ) {
5248
+ private predicate fwdPartialFlow ( PartialPathNode source , PartialPathNode node ) {
5227
5249
source .isFwdSource ( ) and
5228
5250
node = source .getASuccessor + ( )
5229
5251
}
@@ -5245,8 +5267,8 @@ module MakeImpl<InputSig Lang> {
5245
5267
*
5246
5268
* To use this in a `path-problem` query, import the module `PartialPathGraph`.
5247
5269
*/
5248
- predicate partialFlow ( PartialPathNode source , PartialPathNode node , int dist ) {
5249
- partialFlow ( source , node ) and
5270
+ predicate partialFlowFwd ( PartialPathNode source , PartialPathNode node , int dist ) {
5271
+ fwdPartialFlow ( source , node ) and
5250
5272
dist = node .getSourceDistance ( )
5251
5273
}
5252
5274
0 commit comments