diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowUtil.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowUtil.qll index ad007c6f6fe3..7000e4a77f4d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowUtil.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowUtil.qll @@ -20,9 +20,19 @@ predicate localFlowStep(Node nodeFrom, Node nodeTo) { FlowSummaryImpl::Private::Steps::summaryThroughStepValue(nodeFrom, nodeTo, _) } +/** + * Holds if data flows from `source` to `sink` in one or more local + * (intra-procedural) steps. + */ +pragma[inline] +private predicate localFlowPlus(Node source, Node sink) = fastTC(localFlowStep/2)(source, sink) + /** * Holds if data flows from `source` to `sink` in zero or more local * (intra-procedural) steps. */ pragma[inline] -predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) } +predicate localFlow(Node source, Node sink) { + localFlowPlus(source, sink) or + source = sink +} \ No newline at end of file