Skip to content

Commit 9cb63c0

Browse files
committed
Data flow: Sync files
1 parent 7f77422 commit 9cb63c0

28 files changed

+504
-644
lines changed

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4206,11 +4206,10 @@ private module Subpaths {
42064206
pragma[nomagic]
42074207
private predicate subpaths01(
42084208
PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind,
4209-
NodeEx out, FlowState sout, CallContext ccout, AccessPath apout
4209+
NodeEx out, FlowState sout, AccessPath apout
42104210
) {
42114211
exists(Configuration config |
4212-
pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout,
4213-
pragma[only_bind_into](apout)) and
4212+
pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and
42144213
pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and
42154214
paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc,
42164215
pragma[only_bind_into](apout), _, unbindConf(config)) and
@@ -4225,11 +4224,10 @@ private module Subpaths {
42254224
pragma[nomagic]
42264225
private predicate subpaths02(
42274226
PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind,
4228-
NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config
4227+
NodeEx out, FlowState sout, AccessPath apout
42294228
) {
4230-
subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and
4231-
out.asNode() = kind.getAnOutNode(_) and
4232-
config = getPathNodeConf(arg)
4229+
subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and
4230+
out.asNode() = kind.getAnOutNode(_)
42334231
}
42344232

42354233
pragma[nomagic]
@@ -4240,14 +4238,12 @@ private module Subpaths {
42404238
*/
42414239
pragma[nomagic]
42424240
private predicate subpaths03(
4243-
PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout,
4244-
CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config
4241+
PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout
42454242
) {
42464243
exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode |
4247-
subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and
4248-
pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and
4249-
kind = retnode.getKind() and
4250-
scout = arg.getSummaryCtx()
4244+
subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and
4245+
pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and
4246+
kind = retnode.getKind()
42514247
)
42524248
}
42534249

@@ -4267,17 +4263,16 @@ private module Subpaths {
42674263
* `ret -> out` is summarized as the edge `arg -> out`.
42684264
*/
42694265
predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) {
4270-
exists(
4271-
ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout,
4272-
SummaryCtx scout, PathNodeMid out0, Configuration config
4273-
|
4274-
pragma[only_bind_into](arg).getASuccessor() = par and
4275-
subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and
4276-
pathNode(out0, o, sout, ccout, scout, apout, config, _) and
4266+
exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 |
4267+
pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and
4268+
pragma[only_bind_into](arg).getASuccessor() = out0 and
4269+
subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and
42774270
not ret.isHidden() and
4278-
par.getNodeEx() = p
4279-
|
4280-
out = out0 or out = out0.projectToSink()
4271+
par.getNodeEx() = p and
4272+
out0.getNodeEx() = o and
4273+
out0.getState() = sout and
4274+
out0.getAp() = apout and
4275+
(out = out0 or out = out0.projectToSink())
42814276
)
42824277
}
42834278

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4206,11 +4206,10 @@ private module Subpaths {
42064206
pragma[nomagic]
42074207
private predicate subpaths01(
42084208
PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind,
4209-
NodeEx out, FlowState sout, CallContext ccout, AccessPath apout
4209+
NodeEx out, FlowState sout, AccessPath apout
42104210
) {
42114211
exists(Configuration config |
4212-
pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout,
4213-
pragma[only_bind_into](apout)) and
4212+
pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and
42144213
pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and
42154214
paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc,
42164215
pragma[only_bind_into](apout), _, unbindConf(config)) and
@@ -4225,11 +4224,10 @@ private module Subpaths {
42254224
pragma[nomagic]
42264225
private predicate subpaths02(
42274226
PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind,
4228-
NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config
4227+
NodeEx out, FlowState sout, AccessPath apout
42294228
) {
4230-
subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and
4231-
out.asNode() = kind.getAnOutNode(_) and
4232-
config = getPathNodeConf(arg)
4229+
subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and
4230+
out.asNode() = kind.getAnOutNode(_)
42334231
}
42344232

42354233
pragma[nomagic]
@@ -4240,14 +4238,12 @@ private module Subpaths {
42404238
*/
42414239
pragma[nomagic]
42424240
private predicate subpaths03(
4243-
PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout,
4244-
CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config
4241+
PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout
42454242
) {
42464243
exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode |
4247-
subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and
4248-
pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and
4249-
kind = retnode.getKind() and
4250-
scout = arg.getSummaryCtx()
4244+
subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and
4245+
pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and
4246+
kind = retnode.getKind()
42514247
)
42524248
}
42534249

@@ -4267,17 +4263,16 @@ private module Subpaths {
42674263
* `ret -> out` is summarized as the edge `arg -> out`.
42684264
*/
42694265
predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) {
4270-
exists(
4271-
ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout,
4272-
SummaryCtx scout, PathNodeMid out0, Configuration config
4273-
|
4274-
pragma[only_bind_into](arg).getASuccessor() = par and
4275-
subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and
4276-
pathNode(out0, o, sout, ccout, scout, apout, config, _) and
4266+
exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 |
4267+
pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and
4268+
pragma[only_bind_into](arg).getASuccessor() = out0 and
4269+
subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and
42774270
not ret.isHidden() and
4278-
par.getNodeEx() = p
4279-
|
4280-
out = out0 or out = out0.projectToSink()
4271+
par.getNodeEx() = p and
4272+
out0.getNodeEx() = o and
4273+
out0.getState() = sout and
4274+
out0.getAp() = apout and
4275+
(out = out0 or out = out0.projectToSink())
42814276
)
42824277
}
42834278

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4206,11 +4206,10 @@ private module Subpaths {
42064206
pragma[nomagic]
42074207
private predicate subpaths01(
42084208
PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind,
4209-
NodeEx out, FlowState sout, CallContext ccout, AccessPath apout
4209+
NodeEx out, FlowState sout, AccessPath apout
42104210
) {
42114211
exists(Configuration config |
4212-
pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout,
4213-
pragma[only_bind_into](apout)) and
4212+
pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and
42144213
pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and
42154214
paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc,
42164215
pragma[only_bind_into](apout), _, unbindConf(config)) and
@@ -4225,11 +4224,10 @@ private module Subpaths {
42254224
pragma[nomagic]
42264225
private predicate subpaths02(
42274226
PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind,
4228-
NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config
4227+
NodeEx out, FlowState sout, AccessPath apout
42294228
) {
4230-
subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and
4231-
out.asNode() = kind.getAnOutNode(_) and
4232-
config = getPathNodeConf(arg)
4229+
subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and
4230+
out.asNode() = kind.getAnOutNode(_)
42334231
}
42344232

42354233
pragma[nomagic]
@@ -4240,14 +4238,12 @@ private module Subpaths {
42404238
*/
42414239
pragma[nomagic]
42424240
private predicate subpaths03(
4243-
PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout,
4244-
CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config
4241+
PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout
42454242
) {
42464243
exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode |
4247-
subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and
4248-
pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and
4249-
kind = retnode.getKind() and
4250-
scout = arg.getSummaryCtx()
4244+
subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and
4245+
pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and
4246+
kind = retnode.getKind()
42514247
)
42524248
}
42534249

@@ -4267,17 +4263,16 @@ private module Subpaths {
42674263
* `ret -> out` is summarized as the edge `arg -> out`.
42684264
*/
42694265
predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) {
4270-
exists(
4271-
ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout,
4272-
SummaryCtx scout, PathNodeMid out0, Configuration config
4273-
|
4274-
pragma[only_bind_into](arg).getASuccessor() = par and
4275-
subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and
4276-
pathNode(out0, o, sout, ccout, scout, apout, config, _) and
4266+
exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 |
4267+
pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and
4268+
pragma[only_bind_into](arg).getASuccessor() = out0 and
4269+
subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and
42774270
not ret.isHidden() and
4278-
par.getNodeEx() = p
4279-
|
4280-
out = out0 or out = out0.projectToSink()
4271+
par.getNodeEx() = p and
4272+
out0.getNodeEx() = o and
4273+
out0.getState() = sout and
4274+
out0.getAp() = apout and
4275+
(out = out0 or out = out0.projectToSink())
42814276
)
42824277
}
42834278

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4206,11 +4206,10 @@ private module Subpaths {
42064206
pragma[nomagic]
42074207
private predicate subpaths01(
42084208
PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind,
4209-
NodeEx out, FlowState sout, CallContext ccout, AccessPath apout
4209+
NodeEx out, FlowState sout, AccessPath apout
42104210
) {
42114211
exists(Configuration config |
4212-
pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout,
4213-
pragma[only_bind_into](apout)) and
4212+
pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and
42144213
pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and
42154214
paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc,
42164215
pragma[only_bind_into](apout), _, unbindConf(config)) and
@@ -4225,11 +4224,10 @@ private module Subpaths {
42254224
pragma[nomagic]
42264225
private predicate subpaths02(
42274226
PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind,
4228-
NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config
4227+
NodeEx out, FlowState sout, AccessPath apout
42294228
) {
4230-
subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and
4231-
out.asNode() = kind.getAnOutNode(_) and
4232-
config = getPathNodeConf(arg)
4229+
subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and
4230+
out.asNode() = kind.getAnOutNode(_)
42334231
}
42344232

42354233
pragma[nomagic]
@@ -4240,14 +4238,12 @@ private module Subpaths {
42404238
*/
42414239
pragma[nomagic]
42424240
private predicate subpaths03(
4243-
PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout,
4244-
CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config
4241+
PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout
42454242
) {
42464243
exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode |
4247-
subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and
4248-
pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and
4249-
kind = retnode.getKind() and
4250-
scout = arg.getSummaryCtx()
4244+
subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and
4245+
pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and
4246+
kind = retnode.getKind()
42514247
)
42524248
}
42534249

@@ -4267,17 +4263,16 @@ private module Subpaths {
42674263
* `ret -> out` is summarized as the edge `arg -> out`.
42684264
*/
42694265
predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) {
4270-
exists(
4271-
ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout,
4272-
SummaryCtx scout, PathNodeMid out0, Configuration config
4273-
|
4274-
pragma[only_bind_into](arg).getASuccessor() = par and
4275-
subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and
4276-
pathNode(out0, o, sout, ccout, scout, apout, config, _) and
4266+
exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 |
4267+
pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and
4268+
pragma[only_bind_into](arg).getASuccessor() = out0 and
4269+
subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and
42774270
not ret.isHidden() and
4278-
par.getNodeEx() = p
4279-
|
4280-
out = out0 or out = out0.projectToSink()
4271+
par.getNodeEx() = p and
4272+
out0.getNodeEx() = o and
4273+
out0.getState() = sout and
4274+
out0.getAp() = apout and
4275+
(out = out0 or out = out0.projectToSink())
42814276
)
42824277
}
42834278

cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4206,11 +4206,10 @@ private module Subpaths {
42064206
pragma[nomagic]
42074207
private predicate subpaths01(
42084208
PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind,
4209-
NodeEx out, FlowState sout, CallContext ccout, AccessPath apout
4209+
NodeEx out, FlowState sout, AccessPath apout
42104210
) {
42114211
exists(Configuration config |
4212-
pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout,
4213-
pragma[only_bind_into](apout)) and
4212+
pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and
42144213
pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and
42154214
paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc,
42164215
pragma[only_bind_into](apout), _, unbindConf(config)) and
@@ -4225,11 +4224,10 @@ private module Subpaths {
42254224
pragma[nomagic]
42264225
private predicate subpaths02(
42274226
PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind,
4228-
NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config
4227+
NodeEx out, FlowState sout, AccessPath apout
42294228
) {
4230-
subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and
4231-
out.asNode() = kind.getAnOutNode(_) and
4232-
config = getPathNodeConf(arg)
4229+
subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and
4230+
out.asNode() = kind.getAnOutNode(_)
42334231
}
42344232

42354233
pragma[nomagic]
@@ -4240,14 +4238,12 @@ private module Subpaths {
42404238
*/
42414239
pragma[nomagic]
42424240
private predicate subpaths03(
4243-
PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout,
4244-
CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config
4241+
PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout
42454242
) {
42464243
exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode |
4247-
subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and
4248-
pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and
4249-
kind = retnode.getKind() and
4250-
scout = arg.getSummaryCtx()
4244+
subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and
4245+
pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and
4246+
kind = retnode.getKind()
42514247
)
42524248
}
42534249

@@ -4267,17 +4263,16 @@ private module Subpaths {
42674263
* `ret -> out` is summarized as the edge `arg -> out`.
42684264
*/
42694265
predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) {
4270-
exists(
4271-
ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout,
4272-
SummaryCtx scout, PathNodeMid out0, Configuration config
4273-
|
4274-
pragma[only_bind_into](arg).getASuccessor() = par and
4275-
subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and
4276-
pathNode(out0, o, sout, ccout, scout, apout, config, _) and
4266+
exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 |
4267+
pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and
4268+
pragma[only_bind_into](arg).getASuccessor() = out0 and
4269+
subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and
42774270
not ret.isHidden() and
4278-
par.getNodeEx() = p
4279-
|
4280-
out = out0 or out = out0.projectToSink()
4271+
par.getNodeEx() = p and
4272+
out0.getNodeEx() = o and
4273+
out0.getState() = sout and
4274+
out0.getAp() = apout and
4275+
(out = out0 or out = out0.projectToSink())
42814276
)
42824277
}
42834278

0 commit comments

Comments
 (0)