Compare commits

...

1 Commits

Author SHA1 Message Date
Nick Rolfe
3ef203653f DataFlow: use doublyBoundedFastTC in flowPath 2024-03-27 11:00:56 +00:00

View File

@@ -3749,6 +3749,13 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
private predicate pathSuccPlus(PathNodeImpl n1, PathNodeImpl n2) = fastTC(pathSucc/2)(n1, n2)
private predicate isFlowSource(PathNodeImpl n) { n.isFlowSource() }
private predicate isFlowSink(PathNodeImpl n) { n.isFlowSink() }
private predicate doublyBoundedPathSuccPlus(PathNodeImpl n1, PathNodeImpl n2) =
doublyBoundedFastTC(pathSucc/2, isFlowSource/1, isFlowSink/1)(n1, n2)
/**
* A `Node` augmented with a call context (except for sinks) and an access path.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
@@ -4437,9 +4444,9 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
exists(PathNodeImpl flowsource, PathNodeImpl flowsink |
source = flowsource and sink = flowsink
|
flowsource.isFlowSource() and
(flowsource = flowsink or pathSuccPlus(flowsource, flowsink)) and
flowsink.isFlowSink()
flowsource.isFlowSource() and flowsink.isFlowSink() and flowsource = flowsink
or
doublyBoundedPathSuccPlus(flowsource, flowsink)
)
}