diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index f42da2f2fc00..5cf42a148b74 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -2695,20 +2695,22 @@ module MakeImpl Lang> { private predicate localFlowExit(NodeEx node, FlowState state, Ap ap) { revFlow(node, pragma[only_bind_into](state), pragma[only_bind_into](ap)) and ( - exists(NodeEx next, Ap apNext | revFlow(next, pragma[only_bind_into](state), apNext) | - jumpStepEx(node, next) and - apNext = ap + exists(NodeEx next | + revFlow(pragma[only_bind_out](next), pragma[only_bind_into](state), ap) + | + jumpStepEx(node, next) or additionalJumpStep(node, next, _) and - apNext = ap and ap instanceof ApNil or - callEdgeArgParam(_, _, node, next, _, ap) and - apNext = ap - or - callEdgeReturn(_, _, node, _, next, _, ap) and - apNext = ap + callEdgeArgParam(_, _, node, next, _, ap) or + callEdgeReturn(_, _, node, _, next, _, ap) + ) + or + exists(NodeEx next | + revFlow(pragma[only_bind_out](next), pragma[only_bind_into](state), _) + | storeStepCand(node, _, _, next, _, _) or readStepCand(node, _, next)