Skip to content

Commit 045d424

Browse files
committed
Address review comment
1 parent 5f9b8c0 commit 045d424

File tree

1 file changed

+13
-19
lines changed

1 file changed

+13
-19
lines changed

shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1439,23 +1439,15 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
14391439
CachedCallContextSensitivity::CcNoCall ctx1, CachedCallContextSensitivity::CcNoCall ctx2
14401440
|
14411441
model = mergeModels(model1, model2) and
1442-
(
1443-
// call may restrict the set of call sites that can be returned to
1444-
ctx2.(CachedCallContextSensitivity::CcReturn).isReturn(callable, call)
1445-
or
1446-
// call does not restrict the set of call sites that can be returned to
1447-
not exists(CachedCallContextSensitivity::CcReturn ret | ret.isReturn(callable, call)) and
1448-
CachedCallContextSensitivity::viableImplNotCallContextReducedReverse(ctx2)
1449-
) and
14501442
ctx = mergeContexts(ctx1, ctx2)
14511443
|
14521444
// flow through: no prior read
14531445
parameterValueFlowArg(p, arg, mustBeNone, model1, ctx1) and
1454-
argumentValueFlowsThrough(call, callable, arg, read, node, model2)
1446+
argumentValueFlowsThrough(call, callable, arg, read, node, model2, ctx2)
14551447
or
14561448
// flow through: no read inside method
14571449
parameterValueFlowArg(p, arg, read, model1, ctx1) and
1458-
argumentValueFlowsThrough(call, callable, arg, mustBeNone, node, model2)
1450+
argumentValueFlowsThrough(call, callable, arg, mustBeNone, node, model2, ctx2)
14591451
)
14601452
}
14611453

@@ -1471,26 +1463,28 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
14711463
pragma[nomagic]
14721464
private predicate argumentValueFlowsThrough0(
14731465
DataFlowCall call, DataFlowCallable callable, ArgNode arg, ReturnKind kind,
1474-
ReadStepTypesOption read, string model
1466+
ReadStepTypesOption read, string model, CachedCallContextSensitivity::CcNoCall outerCtx
14751467
) {
1476-
exists(ParamNode param, CachedCallContextSensitivity::CcNoCall ctx |
1468+
exists(ParamNode param, CachedCallContextSensitivity::CcNoCall innerCtx |
14771469
viableParamArg(call, param, arg) and
1478-
parameterValueFlowReturn(param, kind, read, model, ctx) and
1479-
callable = nodeGetEnclosingCallable(param)
1470+
parameterValueFlowReturn(param, kind, read, model, innerCtx) and
1471+
callable = nodeGetEnclosingCallable(param) and
1472+
outerCtx = CachedCallContextSensitivity::getCallContextReturn(callable, call)
14801473
|
1481-
CachedCallContextSensitivity::viableImplNotCallContextReducedReverse(ctx)
1474+
CachedCallContextSensitivity::viableImplNotCallContextReducedReverse(innerCtx)
14821475
or
1483-
call = CachedCallContextSensitivity::viableImplCallContextReducedReverse(callable, ctx)
1476+
call =
1477+
CachedCallContextSensitivity::viableImplCallContextReducedReverse(callable, innerCtx)
14841478
)
14851479
}
14861480

14871481
pragma[nomagic]
14881482
private predicate argumentValueFlowsThrough(
14891483
DataFlowCall call, DataFlowCallable callable, ArgNode arg, ReadStepTypesOption read,
1490-
Node out, string model
1484+
Node out, string model, CachedCallContextSensitivity::CcNoCall ctx
14911485
) {
14921486
exists(ReturnKind kind |
1493-
argumentValueFlowsThrough0(call, callable, arg, kind, read, model) and
1487+
argumentValueFlowsThrough0(call, callable, arg, kind, read, model, ctx) and
14941488
out = getAnOutNode(call, kind)
14951489
|
14961490
// normal flow through
@@ -1515,7 +1509,7 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
15151509
predicate argumentValueFlowsThrough(
15161510
ArgNode arg, ReadStepTypesOption read, Node out, string model
15171511
) {
1518-
argumentValueFlowsThrough(_, _, arg, read, out, model)
1512+
argumentValueFlowsThrough(_, _, arg, read, out, model, _)
15191513
}
15201514

15211515
/**

0 commit comments

Comments
 (0)