diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll index 5c49809ed40..7919b38de3f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -133,12 +133,14 @@ AssignableDefinitionNode assignableDefinitionNode(AssignableDefinition def) { predicate localFlowStep = localFlowStepImpl/2; +private predicate localFlowStepPlus(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) { localFlowStepPlus(source, sink) or source = sink } /** * Holds if data can flow from `e1` to `e2` in zero or more diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPublic.qll index 1e60165d748..60ebece0ee5 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPublic.qll @@ -1,12 +1,17 @@ private import csharp private import TaintTrackingPrivate +private predicate localTaintStepPlus(DataFlow::Node source, DataFlow::Node sink) = + fastTC(localTaintStep/2)(source, sink) + /** * Holds if taint propagates from `source` to `sink` in zero or more local * (intra-procedural) steps. */ pragma[inline] -predicate localTaint(DataFlow::Node source, DataFlow::Node sink) { localTaintStep*(source, sink) } +predicate localTaint(DataFlow::Node source, DataFlow::Node sink) { + localTaintStepPlus(source, sink) or source = sink +} /** * Holds if taint can flow from `e1` to `e2` in zero or more