Skip to content

Commit 6874b8d

Browse files
committed
Data flow: Prevent bad join-order in pathStep
1 parent 652e8b4 commit 6874b8d

File tree

23 files changed

+92
-161
lines changed

23 files changed

+92
-161
lines changed

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,12 +2132,9 @@ private module Stage4 {
21322132
}
21332133

21342134
bindingset[node, cc, config]
2135-
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2135+
LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,12 +2132,9 @@ private module Stage4 {
21322132
}
21332133

21342134
bindingset[node, cc, config]
2135-
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2135+
LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,12 +2132,9 @@ private module Stage4 {
21322132
}
21332133

21342134
bindingset[node, cc, config]
2135-
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2135+
LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,12 +2132,9 @@ private module Stage4 {
21322132
}
21332133

21342134
bindingset[node, cc, config]
2135-
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2135+
LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,12 +2132,9 @@ private module Stage4 {
21322132
}
21332133

21342134
bindingset[node, cc, config]
2135-
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2135+
LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,12 +2132,9 @@ private module Stage4 {
21322132
}
21332133

21342134
bindingset[node, cc, config]
2135-
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2135+
LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,12 +2132,9 @@ private module Stage4 {
21322132
}
21332133

21342134
bindingset[node, cc, config]
2135-
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2135+
LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,12 +2132,9 @@ private module Stage4 {
21322132
}
21332133

21342134
bindingset[node, cc, config]
2135-
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2135+
LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,12 +2132,9 @@ private module Stage4 {
21322132
}
21332133

21342134
bindingset[node, cc, config]
2135-
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2135+
LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,12 +2132,9 @@ private module Stage4 {
21322132
}
21332133

21342134
bindingset[node, cc, config]
2135-
private LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136-
exists(Cc cc0 |
2137-
cc = pragma[only_bind_into](cc0) and
2138-
localFlowEntry(node, config) and
2139-
result = getLocalCallContext(cc0, getNodeEnclosingCallable(node))
2140-
)
2135+
LocalCc getLocalCc(Node node, Cc cc, Configuration config) {
2136+
localFlowEntry(node, config) and
2137+
result = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(node))
21412138
}
21422139

21432140
private predicate localStep(
@@ -3132,7 +3129,7 @@ private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, SummaryCt
31323129
conf = mid.getConfiguration() and
31333130
cc = mid.getCallContext() and
31343131
sc = mid.getSummaryCtx() and
3135-
localCC = getLocalCallContext(cc, getNodeEnclosingCallable(midnode)) and
3132+
localCC = getLocalCallContext(pragma[only_bind_out](cc), getNodeEnclosingCallable(midnode)) and
31363133
ap0 = mid.getAp()
31373134
|
31383135
localFlowBigStep(midnode, node, true, _, conf, localCC) and

0 commit comments

Comments
 (0)