Skip to content

Commit 3876e43

Browse files
authored
Merge pull request github#12420 from kaspersv/kaspersv/dataflow-remove-alias-preds
Dataflow: Remove revFlowAlias and revFlowApAlias predicates
2 parents be163cf + 1d2f1b6 commit 3876e43

File tree

8 files changed

+96
-224
lines changed

8 files changed

+96
-224
lines changed

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

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,19 +1145,13 @@ module Impl<FullStateConfigSig Config> {
11451145
import Param
11461146

11471147
/* Begin: Stage logic. */
1148-
// use an alias as a workaround for bad functionality-induced joins
1149-
pragma[nomagic]
1150-
private predicate revFlowApAlias(NodeEx node, ApApprox apa) {
1151-
PrevStage::revFlowAp(node, apa)
1152-
}
1153-
11541148
pragma[nomagic]
11551149
private predicate flowIntoCallApa(
11561150
DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, ApApprox apa
11571151
) {
11581152
flowIntoCall(call, arg, p, allowsFieldFlow) and
11591153
PrevStage::revFlowAp(p, pragma[only_bind_into](apa)) and
1160-
revFlowApAlias(arg, pragma[only_bind_into](apa))
1154+
PrevStage::revFlowAp(arg, pragma[only_bind_into](apa))
11611155
}
11621156

11631157
pragma[nomagic]
@@ -1167,7 +1161,7 @@ module Impl<FullStateConfigSig Config> {
11671161
) {
11681162
flowOutOfCall(call, ret, kind, out, allowsFieldFlow) and
11691163
PrevStage::revFlowAp(out, pragma[only_bind_into](apa)) and
1170-
revFlowApAlias(ret, pragma[only_bind_into](apa))
1164+
PrevStage::revFlowAp(ret, pragma[only_bind_into](apa))
11711165
}
11721166

11731167
pragma[nomagic]
@@ -1695,16 +1689,6 @@ module Impl<FullStateConfigSig Config> {
16951689
pragma[nomagic]
16961690
predicate revFlowAp(NodeEx node, Ap ap) { revFlow(node, _, _, _, ap) }
16971691

1698-
// use an alias as a workaround for bad functionality-induced joins
1699-
pragma[nomagic]
1700-
additional predicate revFlowAlias(NodeEx node) { revFlow(node, _, _, _, _) }
1701-
1702-
// use an alias as a workaround for bad functionality-induced joins
1703-
pragma[nomagic]
1704-
additional predicate revFlowAlias(NodeEx node, FlowState state, Ap ap) {
1705-
revFlow(node, state, ap)
1706-
}
1707-
17081692
private predicate fwdConsCand(TypedContent tc, Ap ap) { storeStepFwd(_, ap, tc, _, _) }
17091693

17101694
private predicate revConsCand(TypedContent tc, Ap ap) { storeStepCand(_, ap, tc, _, _) }
@@ -1978,7 +1962,7 @@ module Impl<FullStateConfigSig Config> {
19781962
) {
19791963
flowOutOfCallNodeCand1(call, node1, kind, node2, allowsFieldFlow) and
19801964
Stage2::revFlow(node2) and
1981-
Stage2::revFlowAlias(node1)
1965+
Stage2::revFlow(node1)
19821966
}
19831967

19841968
pragma[nomagic]
@@ -1987,7 +1971,7 @@ module Impl<FullStateConfigSig Config> {
19871971
) {
19881972
flowIntoCallNodeCand1(call, node1, node2, allowsFieldFlow) and
19891973
Stage2::revFlow(node2) and
1990-
Stage2::revFlowAlias(node1)
1974+
Stage2::revFlow(node1)
19911975
}
19921976

19931977
private module LocalFlowBigStep {
@@ -2069,11 +2053,11 @@ module Impl<FullStateConfigSig Config> {
20692053
additionalLocalFlowStepNodeCand1(node1, node2) and
20702054
state1 = state2 and
20712055
Stage2::revFlow(node1, pragma[only_bind_into](state1), false) and
2072-
Stage2::revFlowAlias(node2, pragma[only_bind_into](state2), false)
2056+
Stage2::revFlow(node2, pragma[only_bind_into](state2), false)
20732057
or
20742058
additionalLocalStateStep(node1, state1, node2, state2) and
20752059
Stage2::revFlow(node1, state1, false) and
2076-
Stage2::revFlowAlias(node2, state2, false)
2060+
Stage2::revFlow(node2, state2, false)
20772061
}
20782062

20792063
/**
@@ -2266,7 +2250,7 @@ module Impl<FullStateConfigSig Config> {
22662250
) {
22672251
localFlowBigStep(node1, state1, node2, state2, preservesValue, ap.getType(), _) and
22682252
PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and
2269-
PrevStage::revFlowAlias(node2, pragma[only_bind_into](state2), _) and
2253+
PrevStage::revFlow(node2, pragma[only_bind_into](state2), _) and
22702254
exists(lcc)
22712255
}
22722256

@@ -2277,7 +2261,7 @@ module Impl<FullStateConfigSig Config> {
22772261
exists(FlowState state |
22782262
flowOutOfCallNodeCand2(call, node1, kind, node2, allowsFieldFlow) and
22792263
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2280-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2264+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
22812265
)
22822266
}
22832267

@@ -2288,7 +2272,7 @@ module Impl<FullStateConfigSig Config> {
22882272
exists(FlowState state |
22892273
flowIntoCallNodeCand2(call, node1, node2, allowsFieldFlow) and
22902274
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2291-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2275+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
22922276
)
22932277
}
22942278

@@ -2590,7 +2574,7 @@ module Impl<FullStateConfigSig Config> {
25902574
) {
25912575
localFlowBigStep(node1, state1, node2, state2, preservesValue, ap.getType(), lcc) and
25922576
PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and
2593-
PrevStage::revFlowAlias(node2, pragma[only_bind_into](state2), _)
2577+
PrevStage::revFlow(node2, pragma[only_bind_into](state2), _)
25942578
}
25952579

25962580
pragma[nomagic]
@@ -2600,7 +2584,7 @@ module Impl<FullStateConfigSig Config> {
26002584
exists(FlowState state |
26012585
flowOutOfCallNodeCand2(call, node1, kind, node2, allowsFieldFlow) and
26022586
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2603-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2587+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
26042588
)
26052589
}
26062590

@@ -2611,7 +2595,7 @@ module Impl<FullStateConfigSig Config> {
26112595
exists(FlowState state |
26122596
flowIntoCallNodeCand2(call, node1, node2, allowsFieldFlow) and
26132597
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2614-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2598+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
26152599
)
26162600
}
26172601

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

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,19 +1145,13 @@ module Impl<FullStateConfigSig Config> {
11451145
import Param
11461146

11471147
/* Begin: Stage logic. */
1148-
// use an alias as a workaround for bad functionality-induced joins
1149-
pragma[nomagic]
1150-
private predicate revFlowApAlias(NodeEx node, ApApprox apa) {
1151-
PrevStage::revFlowAp(node, apa)
1152-
}
1153-
11541148
pragma[nomagic]
11551149
private predicate flowIntoCallApa(
11561150
DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, ApApprox apa
11571151
) {
11581152
flowIntoCall(call, arg, p, allowsFieldFlow) and
11591153
PrevStage::revFlowAp(p, pragma[only_bind_into](apa)) and
1160-
revFlowApAlias(arg, pragma[only_bind_into](apa))
1154+
PrevStage::revFlowAp(arg, pragma[only_bind_into](apa))
11611155
}
11621156

11631157
pragma[nomagic]
@@ -1167,7 +1161,7 @@ module Impl<FullStateConfigSig Config> {
11671161
) {
11681162
flowOutOfCall(call, ret, kind, out, allowsFieldFlow) and
11691163
PrevStage::revFlowAp(out, pragma[only_bind_into](apa)) and
1170-
revFlowApAlias(ret, pragma[only_bind_into](apa))
1164+
PrevStage::revFlowAp(ret, pragma[only_bind_into](apa))
11711165
}
11721166

11731167
pragma[nomagic]
@@ -1695,16 +1689,6 @@ module Impl<FullStateConfigSig Config> {
16951689
pragma[nomagic]
16961690
predicate revFlowAp(NodeEx node, Ap ap) { revFlow(node, _, _, _, ap) }
16971691

1698-
// use an alias as a workaround for bad functionality-induced joins
1699-
pragma[nomagic]
1700-
additional predicate revFlowAlias(NodeEx node) { revFlow(node, _, _, _, _) }
1701-
1702-
// use an alias as a workaround for bad functionality-induced joins
1703-
pragma[nomagic]
1704-
additional predicate revFlowAlias(NodeEx node, FlowState state, Ap ap) {
1705-
revFlow(node, state, ap)
1706-
}
1707-
17081692
private predicate fwdConsCand(TypedContent tc, Ap ap) { storeStepFwd(_, ap, tc, _, _) }
17091693

17101694
private predicate revConsCand(TypedContent tc, Ap ap) { storeStepCand(_, ap, tc, _, _) }
@@ -1978,7 +1962,7 @@ module Impl<FullStateConfigSig Config> {
19781962
) {
19791963
flowOutOfCallNodeCand1(call, node1, kind, node2, allowsFieldFlow) and
19801964
Stage2::revFlow(node2) and
1981-
Stage2::revFlowAlias(node1)
1965+
Stage2::revFlow(node1)
19821966
}
19831967

19841968
pragma[nomagic]
@@ -1987,7 +1971,7 @@ module Impl<FullStateConfigSig Config> {
19871971
) {
19881972
flowIntoCallNodeCand1(call, node1, node2, allowsFieldFlow) and
19891973
Stage2::revFlow(node2) and
1990-
Stage2::revFlowAlias(node1)
1974+
Stage2::revFlow(node1)
19911975
}
19921976

19931977
private module LocalFlowBigStep {
@@ -2069,11 +2053,11 @@ module Impl<FullStateConfigSig Config> {
20692053
additionalLocalFlowStepNodeCand1(node1, node2) and
20702054
state1 = state2 and
20712055
Stage2::revFlow(node1, pragma[only_bind_into](state1), false) and
2072-
Stage2::revFlowAlias(node2, pragma[only_bind_into](state2), false)
2056+
Stage2::revFlow(node2, pragma[only_bind_into](state2), false)
20732057
or
20742058
additionalLocalStateStep(node1, state1, node2, state2) and
20752059
Stage2::revFlow(node1, state1, false) and
2076-
Stage2::revFlowAlias(node2, state2, false)
2060+
Stage2::revFlow(node2, state2, false)
20772061
}
20782062

20792063
/**
@@ -2266,7 +2250,7 @@ module Impl<FullStateConfigSig Config> {
22662250
) {
22672251
localFlowBigStep(node1, state1, node2, state2, preservesValue, ap.getType(), _) and
22682252
PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and
2269-
PrevStage::revFlowAlias(node2, pragma[only_bind_into](state2), _) and
2253+
PrevStage::revFlow(node2, pragma[only_bind_into](state2), _) and
22702254
exists(lcc)
22712255
}
22722256

@@ -2277,7 +2261,7 @@ module Impl<FullStateConfigSig Config> {
22772261
exists(FlowState state |
22782262
flowOutOfCallNodeCand2(call, node1, kind, node2, allowsFieldFlow) and
22792263
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2280-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2264+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
22812265
)
22822266
}
22832267

@@ -2288,7 +2272,7 @@ module Impl<FullStateConfigSig Config> {
22882272
exists(FlowState state |
22892273
flowIntoCallNodeCand2(call, node1, node2, allowsFieldFlow) and
22902274
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2291-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2275+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
22922276
)
22932277
}
22942278

@@ -2590,7 +2574,7 @@ module Impl<FullStateConfigSig Config> {
25902574
) {
25912575
localFlowBigStep(node1, state1, node2, state2, preservesValue, ap.getType(), lcc) and
25922576
PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and
2593-
PrevStage::revFlowAlias(node2, pragma[only_bind_into](state2), _)
2577+
PrevStage::revFlow(node2, pragma[only_bind_into](state2), _)
25942578
}
25952579

25962580
pragma[nomagic]
@@ -2600,7 +2584,7 @@ module Impl<FullStateConfigSig Config> {
26002584
exists(FlowState state |
26012585
flowOutOfCallNodeCand2(call, node1, kind, node2, allowsFieldFlow) and
26022586
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2603-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2587+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
26042588
)
26052589
}
26062590

@@ -2611,7 +2595,7 @@ module Impl<FullStateConfigSig Config> {
26112595
exists(FlowState state |
26122596
flowIntoCallNodeCand2(call, node1, node2, allowsFieldFlow) and
26132597
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2614-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2598+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
26152599
)
26162600
}
26172601

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

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,19 +1145,13 @@ module Impl<FullStateConfigSig Config> {
11451145
import Param
11461146

11471147
/* Begin: Stage logic. */
1148-
// use an alias as a workaround for bad functionality-induced joins
1149-
pragma[nomagic]
1150-
private predicate revFlowApAlias(NodeEx node, ApApprox apa) {
1151-
PrevStage::revFlowAp(node, apa)
1152-
}
1153-
11541148
pragma[nomagic]
11551149
private predicate flowIntoCallApa(
11561150
DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow, ApApprox apa
11571151
) {
11581152
flowIntoCall(call, arg, p, allowsFieldFlow) and
11591153
PrevStage::revFlowAp(p, pragma[only_bind_into](apa)) and
1160-
revFlowApAlias(arg, pragma[only_bind_into](apa))
1154+
PrevStage::revFlowAp(arg, pragma[only_bind_into](apa))
11611155
}
11621156

11631157
pragma[nomagic]
@@ -1167,7 +1161,7 @@ module Impl<FullStateConfigSig Config> {
11671161
) {
11681162
flowOutOfCall(call, ret, kind, out, allowsFieldFlow) and
11691163
PrevStage::revFlowAp(out, pragma[only_bind_into](apa)) and
1170-
revFlowApAlias(ret, pragma[only_bind_into](apa))
1164+
PrevStage::revFlowAp(ret, pragma[only_bind_into](apa))
11711165
}
11721166

11731167
pragma[nomagic]
@@ -1695,16 +1689,6 @@ module Impl<FullStateConfigSig Config> {
16951689
pragma[nomagic]
16961690
predicate revFlowAp(NodeEx node, Ap ap) { revFlow(node, _, _, _, ap) }
16971691

1698-
// use an alias as a workaround for bad functionality-induced joins
1699-
pragma[nomagic]
1700-
additional predicate revFlowAlias(NodeEx node) { revFlow(node, _, _, _, _) }
1701-
1702-
// use an alias as a workaround for bad functionality-induced joins
1703-
pragma[nomagic]
1704-
additional predicate revFlowAlias(NodeEx node, FlowState state, Ap ap) {
1705-
revFlow(node, state, ap)
1706-
}
1707-
17081692
private predicate fwdConsCand(TypedContent tc, Ap ap) { storeStepFwd(_, ap, tc, _, _) }
17091693

17101694
private predicate revConsCand(TypedContent tc, Ap ap) { storeStepCand(_, ap, tc, _, _) }
@@ -1978,7 +1962,7 @@ module Impl<FullStateConfigSig Config> {
19781962
) {
19791963
flowOutOfCallNodeCand1(call, node1, kind, node2, allowsFieldFlow) and
19801964
Stage2::revFlow(node2) and
1981-
Stage2::revFlowAlias(node1)
1965+
Stage2::revFlow(node1)
19821966
}
19831967

19841968
pragma[nomagic]
@@ -1987,7 +1971,7 @@ module Impl<FullStateConfigSig Config> {
19871971
) {
19881972
flowIntoCallNodeCand1(call, node1, node2, allowsFieldFlow) and
19891973
Stage2::revFlow(node2) and
1990-
Stage2::revFlowAlias(node1)
1974+
Stage2::revFlow(node1)
19911975
}
19921976

19931977
private module LocalFlowBigStep {
@@ -2069,11 +2053,11 @@ module Impl<FullStateConfigSig Config> {
20692053
additionalLocalFlowStepNodeCand1(node1, node2) and
20702054
state1 = state2 and
20712055
Stage2::revFlow(node1, pragma[only_bind_into](state1), false) and
2072-
Stage2::revFlowAlias(node2, pragma[only_bind_into](state2), false)
2056+
Stage2::revFlow(node2, pragma[only_bind_into](state2), false)
20732057
or
20742058
additionalLocalStateStep(node1, state1, node2, state2) and
20752059
Stage2::revFlow(node1, state1, false) and
2076-
Stage2::revFlowAlias(node2, state2, false)
2060+
Stage2::revFlow(node2, state2, false)
20772061
}
20782062

20792063
/**
@@ -2266,7 +2250,7 @@ module Impl<FullStateConfigSig Config> {
22662250
) {
22672251
localFlowBigStep(node1, state1, node2, state2, preservesValue, ap.getType(), _) and
22682252
PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and
2269-
PrevStage::revFlowAlias(node2, pragma[only_bind_into](state2), _) and
2253+
PrevStage::revFlow(node2, pragma[only_bind_into](state2), _) and
22702254
exists(lcc)
22712255
}
22722256

@@ -2277,7 +2261,7 @@ module Impl<FullStateConfigSig Config> {
22772261
exists(FlowState state |
22782262
flowOutOfCallNodeCand2(call, node1, kind, node2, allowsFieldFlow) and
22792263
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2280-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2264+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
22812265
)
22822266
}
22832267

@@ -2288,7 +2272,7 @@ module Impl<FullStateConfigSig Config> {
22882272
exists(FlowState state |
22892273
flowIntoCallNodeCand2(call, node1, node2, allowsFieldFlow) and
22902274
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2291-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2275+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
22922276
)
22932277
}
22942278

@@ -2590,7 +2574,7 @@ module Impl<FullStateConfigSig Config> {
25902574
) {
25912575
localFlowBigStep(node1, state1, node2, state2, preservesValue, ap.getType(), lcc) and
25922576
PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and
2593-
PrevStage::revFlowAlias(node2, pragma[only_bind_into](state2), _)
2577+
PrevStage::revFlow(node2, pragma[only_bind_into](state2), _)
25942578
}
25952579

25962580
pragma[nomagic]
@@ -2600,7 +2584,7 @@ module Impl<FullStateConfigSig Config> {
26002584
exists(FlowState state |
26012585
flowOutOfCallNodeCand2(call, node1, kind, node2, allowsFieldFlow) and
26022586
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2603-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2587+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
26042588
)
26052589
}
26062590

@@ -2611,7 +2595,7 @@ module Impl<FullStateConfigSig Config> {
26112595
exists(FlowState state |
26122596
flowIntoCallNodeCand2(call, node1, node2, allowsFieldFlow) and
26132597
PrevStage::revFlow(node2, pragma[only_bind_into](state), _) and
2614-
PrevStage::revFlowAlias(node1, pragma[only_bind_into](state), _)
2598+
PrevStage::revFlow(node1, pragma[only_bind_into](state), _)
26152599
)
26162600
}
26172601

0 commit comments

Comments
 (0)