Skip to content

Commit 296d10f

Browse files
committed
Data flow: Adjust callMayFlowThroughFwd pragmas
1 parent c3ecae5 commit 296d10f

File tree

25 files changed

+375
-225
lines changed

25 files changed

+375
-225
lines changed

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,10 +1170,12 @@ private module Stage2 {
11701170
pragma[nomagic]
11711171
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
11721172
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1173-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1174-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1173+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1174+
pragma[only_bind_into](config)) and
11751175
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1176-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1176+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1177+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1178+
pragma[only_bind_into](config))
11771179
)
11781180
}
11791181

@@ -1857,10 +1859,12 @@ private module Stage3 {
18571859
pragma[nomagic]
18581860
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
18591861
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1860-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1861-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1862+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1863+
pragma[only_bind_into](config)) and
18621864
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1863-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1865+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1866+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1867+
pragma[only_bind_into](config))
18641868
)
18651869
}
18661870

@@ -2614,10 +2618,12 @@ private module Stage4 {
26142618
pragma[nomagic]
26152619
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
26162620
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
2617-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
2618-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
2621+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
2622+
pragma[only_bind_into](config)) and
26192623
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
2620-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
2624+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
2625+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
2626+
pragma[only_bind_into](config))
26212627
)
26222628
}
26232629

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,10 +1170,12 @@ private module Stage2 {
11701170
pragma[nomagic]
11711171
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
11721172
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1173-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1174-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1173+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1174+
pragma[only_bind_into](config)) and
11751175
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1176-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1176+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1177+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1178+
pragma[only_bind_into](config))
11771179
)
11781180
}
11791181

@@ -1857,10 +1859,12 @@ private module Stage3 {
18571859
pragma[nomagic]
18581860
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
18591861
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1860-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1861-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1862+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1863+
pragma[only_bind_into](config)) and
18621864
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1863-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1865+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1866+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1867+
pragma[only_bind_into](config))
18641868
)
18651869
}
18661870

@@ -2614,10 +2618,12 @@ private module Stage4 {
26142618
pragma[nomagic]
26152619
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
26162620
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
2617-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
2618-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
2621+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
2622+
pragma[only_bind_into](config)) and
26192623
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
2620-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
2624+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
2625+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
2626+
pragma[only_bind_into](config))
26212627
)
26222628
}
26232629

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,10 +1170,12 @@ private module Stage2 {
11701170
pragma[nomagic]
11711171
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
11721172
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1173-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1174-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1173+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1174+
pragma[only_bind_into](config)) and
11751175
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1176-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1176+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1177+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1178+
pragma[only_bind_into](config))
11771179
)
11781180
}
11791181

@@ -1857,10 +1859,12 @@ private module Stage3 {
18571859
pragma[nomagic]
18581860
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
18591861
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1860-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1861-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1862+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1863+
pragma[only_bind_into](config)) and
18621864
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1863-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1865+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1866+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1867+
pragma[only_bind_into](config))
18641868
)
18651869
}
18661870

@@ -2614,10 +2618,12 @@ private module Stage4 {
26142618
pragma[nomagic]
26152619
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
26162620
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
2617-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
2618-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
2621+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
2622+
pragma[only_bind_into](config)) and
26192623
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
2620-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
2624+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
2625+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
2626+
pragma[only_bind_into](config))
26212627
)
26222628
}
26232629

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,10 +1170,12 @@ private module Stage2 {
11701170
pragma[nomagic]
11711171
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
11721172
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1173-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1174-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1173+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1174+
pragma[only_bind_into](config)) and
11751175
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1176-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1176+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1177+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1178+
pragma[only_bind_into](config))
11771179
)
11781180
}
11791181

@@ -1857,10 +1859,12 @@ private module Stage3 {
18571859
pragma[nomagic]
18581860
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
18591861
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1860-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1861-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1862+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1863+
pragma[only_bind_into](config)) and
18621864
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1863-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1865+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1866+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1867+
pragma[only_bind_into](config))
18641868
)
18651869
}
18661870

@@ -2614,10 +2618,12 @@ private module Stage4 {
26142618
pragma[nomagic]
26152619
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
26162620
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
2617-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
2618-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
2621+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
2622+
pragma[only_bind_into](config)) and
26192623
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
2620-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
2624+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
2625+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
2626+
pragma[only_bind_into](config))
26212627
)
26222628
}
26232629

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,10 +1170,12 @@ private module Stage2 {
11701170
pragma[nomagic]
11711171
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
11721172
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1173-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1174-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1173+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1174+
pragma[only_bind_into](config)) and
11751175
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1176-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1176+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1177+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1178+
pragma[only_bind_into](config))
11771179
)
11781180
}
11791181

@@ -1857,10 +1859,12 @@ private module Stage3 {
18571859
pragma[nomagic]
18581860
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
18591861
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1860-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1861-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1862+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1863+
pragma[only_bind_into](config)) and
18621864
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1863-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1865+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1866+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1867+
pragma[only_bind_into](config))
18641868
)
18651869
}
18661870

@@ -2614,10 +2618,12 @@ private module Stage4 {
26142618
pragma[nomagic]
26152619
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
26162620
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
2617-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
2618-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
2621+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
2622+
pragma[only_bind_into](config)) and
26192623
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
2620-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
2624+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
2625+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
2626+
pragma[only_bind_into](config))
26212627
)
26222628
}
26232629

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,10 +1170,12 @@ private module Stage2 {
11701170
pragma[nomagic]
11711171
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
11721172
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1173-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1174-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1173+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1174+
pragma[only_bind_into](config)) and
11751175
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1176-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1176+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1177+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1178+
pragma[only_bind_into](config))
11771179
)
11781180
}
11791181

@@ -1857,10 +1859,12 @@ private module Stage3 {
18571859
pragma[nomagic]
18581860
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
18591861
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1860-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1861-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1862+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1863+
pragma[only_bind_into](config)) and
18621864
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1863-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1865+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1866+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1867+
pragma[only_bind_into](config))
18641868
)
18651869
}
18661870

@@ -2614,10 +2618,12 @@ private module Stage4 {
26142618
pragma[nomagic]
26152619
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
26162620
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
2617-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
2618-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
2621+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
2622+
pragma[only_bind_into](config)) and
26192623
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
2620-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
2624+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
2625+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
2626+
pragma[only_bind_into](config))
26212627
)
26222628
}
26232629

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,10 +1170,12 @@ private module Stage2 {
11701170
pragma[nomagic]
11711171
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
11721172
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1173-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1174-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1173+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1174+
pragma[only_bind_into](config)) and
11751175
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1176-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1176+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1177+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1178+
pragma[only_bind_into](config))
11771179
)
11781180
}
11791181

@@ -1857,10 +1859,12 @@ private module Stage3 {
18571859
pragma[nomagic]
18581860
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
18591861
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1860-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1861-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1862+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1863+
pragma[only_bind_into](config)) and
18621864
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1863-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1865+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1866+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1867+
pragma[only_bind_into](config))
18641868
)
18651869
}
18661870

@@ -2614,10 +2618,12 @@ private module Stage4 {
26142618
pragma[nomagic]
26152619
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
26162620
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
2617-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
2618-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
2621+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
2622+
pragma[only_bind_into](config)) and
26192623
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
2620-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
2624+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
2625+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
2626+
pragma[only_bind_into](config))
26212627
)
26222628
}
26232629

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,10 +1170,12 @@ private module Stage2 {
11701170
pragma[nomagic]
11711171
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
11721172
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1173-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1174-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1173+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1174+
pragma[only_bind_into](config)) and
11751175
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1176-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1176+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1177+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1178+
pragma[only_bind_into](config))
11771179
)
11781180
}
11791181

@@ -1857,10 +1859,12 @@ private module Stage3 {
18571859
pragma[nomagic]
18581860
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
18591861
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
1860-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
1861-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
1862+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
1863+
pragma[only_bind_into](config)) and
18621864
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
1863-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
1865+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
1866+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
1867+
pragma[only_bind_into](config))
18641868
)
18651869
}
18661870

@@ -2614,10 +2618,12 @@ private module Stage4 {
26142618
pragma[nomagic]
26152619
private predicate callMayFlowThroughFwd(DataFlowCall call, Configuration config) {
26162620
exists(Ap argAp0, NodeEx out, Cc cc, ApOption argAp, Ap ap |
2617-
fwdFlow(pragma[only_bind_out](out), pragma[only_bind_out](cc), pragma[only_bind_out](argAp),
2618-
pragma[only_bind_out](ap), pragma[only_bind_out](config)) and
2621+
fwdFlow(out, pragma[only_bind_into](cc), pragma[only_bind_into](argAp), ap,
2622+
pragma[only_bind_into](config)) and
26192623
fwdFlowOutFromArg(call, out, argAp0, ap, config) and
2620-
fwdFlowIsEntered(call, cc, argAp, argAp0, config)
2624+
fwdFlowIsEntered(pragma[only_bind_into](call), pragma[only_bind_into](cc),
2625+
pragma[only_bind_into](argAp), pragma[only_bind_into](argAp0),
2626+
pragma[only_bind_into](config))
26212627
)
26222628
}
26232629

0 commit comments

Comments
 (0)