From 9cb63c0a5ef603a67daa091fdf483ba76018d19d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 4 May 2022 14:49:26 +0200 Subject: [PATCH] Data flow: Sync files --- .../cpp/dataflow/internal/DataFlowImpl.qll | 41 ++++++++----------- .../cpp/dataflow/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../cpp/dataflow/internal/DataFlowImpl3.qll | 41 ++++++++----------- .../cpp/dataflow/internal/DataFlowImpl4.qll | 41 ++++++++----------- .../dataflow/internal/DataFlowImplLocal.qll | 41 ++++++++----------- .../cpp/ir/dataflow/internal/DataFlowImpl.qll | 41 ++++++++----------- .../ir/dataflow/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../ir/dataflow/internal/DataFlowImpl3.qll | 41 ++++++++----------- .../ir/dataflow/internal/DataFlowImpl4.qll | 41 ++++++++----------- .../dataflow/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../dataflow/internal/DataFlowImpl3.qll | 41 ++++++++----------- .../dataflow/internal/DataFlowImpl4.qll | 41 ++++++++----------- .../dataflow/internal/DataFlowImpl5.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl3.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl4.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl5.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl6.qll | 41 ++++++++----------- .../DataFlowImplForOnActivityResult.qll | 41 ++++++++----------- .../DataFlowImplForSerializability.qll | 41 ++++++++----------- .../dataflow/new/internal/DataFlowImpl.qll | 41 ++++++++----------- .../dataflow/new/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../dataflow/new/internal/DataFlowImpl3.qll | 41 ++++++++----------- .../dataflow/new/internal/DataFlowImpl4.qll | 41 ++++++++----------- .../ruby/dataflow/internal/DataFlowImpl.qll | 41 ++++++++----------- .../ruby/dataflow/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../internal/DataFlowImplForLibraries.qll | 41 ++++++++----------- 28 files changed, 504 insertions(+), 644 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index afde881c9d2..881c2e7b2f0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index afde881c9d2..881c2e7b2f0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index afde881c9d2..881c2e7b2f0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index afde881c9d2..881c2e7b2f0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index afde881c9d2..881c2e7b2f0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index afde881c9d2..881c2e7b2f0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll index afde881c9d2..881c2e7b2f0 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll index afde881c9d2..881c2e7b2f0 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) }