Skip to content

Commit 209d914

Browse files
committed
Dataflow: Add type column to filter predicate
1 parent c79daf0 commit 209d914

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

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

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,8 +1130,8 @@ module Impl<FullStateConfigSig Config> {
11301130
DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow
11311131
);
11321132

1133-
bindingset[node, state, ap]
1134-
predicate filter(NodeEx node, FlowState state, Ap ap);
1133+
bindingset[node, state, t, ap]
1134+
predicate filter(NodeEx node, FlowState state, Typ t, Ap ap);
11351135

11361136
bindingset[typ, contentType]
11371137
predicate typecheckStore(Typ typ, DataFlowType contentType);
@@ -1192,7 +1192,7 @@ module Impl<FullStateConfigSig Config> {
11921192
) {
11931193
fwdFlow0(node, state, cc, summaryCtx, argAp, t, ap, apa) and
11941194
PrevStage::revFlow(node, state, apa) and
1195-
filter(node, state, ap)
1195+
filter(node, state, t, ap)
11961196
}
11971197

11981198
pragma[inline]
@@ -1955,9 +1955,10 @@ module Impl<FullStateConfigSig Config> {
19551955
)
19561956
}
19571957

1958-
bindingset[node, state, ap]
1959-
predicate filter(NodeEx node, FlowState state, Ap ap) {
1958+
bindingset[node, state, t, ap]
1959+
predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) {
19601960
PrevStage::revFlowState(state) and
1961+
exists(t) and
19611962
exists(ap) and
19621963
not stateBarrier(node, state) and
19631964
(
@@ -2214,10 +2215,10 @@ module Impl<FullStateConfigSig Config> {
22142215
pragma[nomagic]
22152216
private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode }
22162217

2217-
bindingset[node, state, ap]
2218-
predicate filter(NodeEx node, FlowState state, Ap ap) {
2218+
bindingset[node, state, t, ap]
2219+
predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) {
22192220
exists(state) and
2220-
(if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and
2221+
(if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and
22212222
(
22222223
notExpectsContent(node)
22232224
or
@@ -2337,11 +2338,11 @@ module Impl<FullStateConfigSig Config> {
23372338
pragma[nomagic]
23382339
private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode }
23392340

2340-
bindingset[node, state, ap]
2341-
predicate filter(NodeEx node, FlowState state, Ap ap) {
2341+
bindingset[node, state, t, ap]
2342+
predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) {
23422343
exists(state) and
23432344
not clear(node, ap) and
2344-
(if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and
2345+
(if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and
23452346
(
23462347
notExpectsContent(node)
23472348
or
@@ -2633,8 +2634,8 @@ module Impl<FullStateConfigSig Config> {
26332634
)
26342635
}
26352636

2636-
bindingset[node, state, ap]
2637-
predicate filter(NodeEx node, FlowState state, Ap ap) { any() }
2637+
bindingset[node, state, t, ap]
2638+
predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { any() }
26382639

26392640
// Type checking is not necessary here as it has already been done in stage 3.
26402641
bindingset[typ, contentType]

0 commit comments

Comments
 (0)