@@ -355,54 +355,73 @@ module ProductFlow {
355
355
pragma [ only_bind_out ] ( succ .getNode ( ) .getEnclosingCallable ( ) )
356
356
}
357
357
358
- newtype TKind =
358
+ private newtype TKind =
359
359
TInto ( DataFlowCall call ) {
360
- [ any ( Flow1:: PathNode n ) .getNode ( ) , any ( Flow2:: PathNode n ) .getNode ( ) ]
361
- .( ArgumentNode )
362
- .getCall ( ) = call
360
+ intoImpl1 ( _, _, call ) or
361
+ intoImpl2 ( _, _, call )
363
362
} or
364
363
TOutOf ( DataFlowCall call ) {
365
- [ any ( Flow1 :: PathNode n ) . getNode ( ) , any ( Flow2 :: PathNode n ) . getNode ( ) ] . ( OutNode ) . getCall ( ) =
366
- call
364
+ outImpl1 ( _ , _ , call ) or
365
+ outImpl2 ( _ , _ , call )
367
366
} or
368
367
TJump ( )
369
368
370
- private predicate into1 ( Flow1:: PathNode pred1 , Flow1:: PathNode succ1 , TKind kind ) {
369
+ private predicate intoImpl1 ( Flow1:: PathNode pred1 , Flow1:: PathNode succ1 , DataFlowCall call ) {
371
370
Flow1:: PathGraph:: edges ( pred1 , succ1 ) and
371
+ pred1 .getNode ( ) .( ArgumentNode ) .getCall ( ) = call and
372
+ succ1 .getNode ( ) instanceof ParameterNode
373
+ }
374
+
375
+ private predicate into1 ( Flow1:: PathNode pred1 , Flow1:: PathNode succ1 , TKind kind ) {
372
376
exists ( DataFlowCall call |
373
377
kind = TInto ( call ) and
374
- pred1 .getNode ( ) .( ArgumentNode ) .getCall ( ) = call and
375
- succ1 .getNode ( ) instanceof ParameterNode
378
+ intoImpl1 ( pred1 , succ1 , call )
376
379
)
377
380
}
378
381
379
- private predicate out1 ( Flow1:: PathNode pred1 , Flow1:: PathNode succ1 , TKind kind ) {
382
+ private predicate outImpl1 ( Flow1:: PathNode pred1 , Flow1:: PathNode succ1 , DataFlowCall call ) {
380
383
Flow1:: PathGraph:: edges ( pred1 , succ1 ) and
381
- exists ( ReturnKindExt returnKind , DataFlowCall call |
382
- kind = TOutOf ( call ) and
384
+ exists ( ReturnKindExt returnKind |
383
385
succ1 .getNode ( ) = returnKind .getAnOutNode ( call ) and
384
386
pred1 .getNode ( ) .( ReturnNodeExt ) .getKind ( ) = returnKind
385
387
)
386
388
}
387
389
388
- private predicate into2 ( Flow2:: PathNode pred2 , Flow2:: PathNode succ2 , TKind kind ) {
390
+ private predicate out1 ( Flow1:: PathNode pred1 , Flow1:: PathNode succ1 , TKind kind ) {
391
+ exists ( DataFlowCall call |
392
+ outImpl1 ( pred1 , succ1 , call ) and
393
+ kind = TOutOf ( call )
394
+ )
395
+ }
396
+
397
+ private predicate intoImpl2 ( Flow2:: PathNode pred2 , Flow2:: PathNode succ2 , DataFlowCall call ) {
389
398
Flow2:: PathGraph:: edges ( pred2 , succ2 ) and
399
+ pred2 .getNode ( ) .( ArgumentNode ) .getCall ( ) = call and
400
+ succ2 .getNode ( ) instanceof ParameterNode
401
+ }
402
+
403
+ private predicate into2 ( Flow2:: PathNode pred2 , Flow2:: PathNode succ2 , TKind kind ) {
390
404
exists ( DataFlowCall call |
391
405
kind = TInto ( call ) and
392
- pred2 .getNode ( ) .( ArgumentNode ) .getCall ( ) = call and
393
- succ2 .getNode ( ) instanceof ParameterNode
406
+ intoImpl2 ( pred2 , succ2 , call )
394
407
)
395
408
}
396
409
397
- private predicate out2 ( Flow2:: PathNode pred2 , Flow2:: PathNode succ2 , TKind kind ) {
410
+ private predicate outImpl2 ( Flow2:: PathNode pred2 , Flow2:: PathNode succ2 , DataFlowCall call ) {
398
411
Flow2:: PathGraph:: edges ( pred2 , succ2 ) and
399
- exists ( ReturnKindExt returnKind , DataFlowCall call |
400
- kind = TOutOf ( call ) and
412
+ exists ( ReturnKindExt returnKind |
401
413
succ2 .getNode ( ) = returnKind .getAnOutNode ( call ) and
402
414
pred2 .getNode ( ) .( ReturnNodeExt ) .getKind ( ) = returnKind
403
415
)
404
416
}
405
417
418
+ private predicate out2 ( Flow2:: PathNode pred2 , Flow2:: PathNode succ2 , TKind kind ) {
419
+ exists ( DataFlowCall call |
420
+ kind = TOutOf ( call ) and
421
+ outImpl2 ( pred2 , succ2 , call )
422
+ )
423
+ }
424
+
406
425
pragma [ nomagic]
407
426
private predicate interprocEdge1 (
408
427
Declaration predDecl , Declaration succDecl , Flow1:: PathNode pred1 , Flow1:: PathNode succ1 ,
0 commit comments