From 88719b8e7d2840fb4673b149b100372724574315 Mon Sep 17 00:00:00 2001 From: chanelyoung Date: Tue, 28 Jul 2026 12:08:25 -0700 Subject: [PATCH] update localFlow() to use fastTC --- .../python/dataflow/new/internal/DataFlowUtil.qll | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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