Skip to content

Commit 87e663c

Browse files
committed
Rust: Exclude data flow inconsistencies that stem from other inconsistencies
1 parent 1b224c1 commit 87e663c

File tree

5 files changed

+12
-29
lines changed

5 files changed

+12
-29
lines changed

rust/ql/consistency-queries/DataFlowConsistency.ql

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,4 @@
55
* @id rust/diagnostics/data-flow-consistency
66
*/
77

8-
import codeql.rust.dataflow.DataFlow::DataFlow as DataFlow
9-
private import rust
10-
private import codeql.rust.dataflow.internal.DataFlowImpl
11-
private import codeql.rust.dataflow.internal.TaintTrackingImpl
12-
private import codeql.dataflow.internal.DataFlowImplConsistency
13-
14-
private module Input implements InputSig<Location, RustDataFlow> { }
15-
16-
import MakeConsistency<Location, RustDataFlow, RustTaintTracking, Input>
8+
import codeql.rust.dataflow.internal.DataFlowConsistency

rust/ql/lib/codeql/rust/AstConsistency.qll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ query predicate multipleToStrings(Element e, string cls, string s) {
2121
*/
2222
query predicate multipleLocations(Locatable e) { strictcount(e.getLocation()) > 1 }
2323

24+
/**
25+
* Holds if `e` does not have a `Location`.
26+
*/
27+
query predicate noLocation(Locatable e) { strictcount(e.getLocation()) = 0 }
28+
2429
private predicate multiplePrimaryQlClasses(Element e) {
2530
strictcount(string cls | cls = e.getAPrimaryQlClass() and cls != "VariableAccess") > 1
2631
}
@@ -58,6 +63,9 @@ int getAstInconsistencyCounts(string type) {
5863
type = "Multiple locations" and
5964
result = count(Element e | multipleLocations(e) | e)
6065
or
66+
type = "No location" and
67+
result = count(Element e | noLocation(e) | e)
68+
or
6169
type = "Multiple primary QL classes" and
6270
result = count(Element e | multiplePrimaryQlClasses(e) | e)
6371
or

rust/ql/src/queries/diagnostics/DataFlowConsistencyCounts.ql

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,10 @@
55
* @id rust/diagnostics/data-flow-consistency-counts
66
*/
77

8-
private import rust
9-
private import codeql.rust.dataflow.internal.DataFlowImpl
10-
private import codeql.rust.dataflow.internal.TaintTrackingImpl
11-
private import codeql.dataflow.internal.DataFlowImplConsistency
12-
13-
private module Input implements InputSig<Location, RustDataFlow> { }
8+
import codeql.rust.dataflow.internal.DataFlowConsistency as Consistency
149

1510
// see also `rust/diagnostics/data-flow-consistency`, which lists the
1611
// individual inconsistency results.
1712
from string type, int num
18-
where
19-
num =
20-
MakeConsistency<Location, RustDataFlow, RustTaintTracking, Input>::getInconsistencyCounts(type)
13+
where num = Consistency::getInconsistencyCounts(type)
2114
select type, num

rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/DataFlowConsistency.expected

Lines changed: 0 additions & 11 deletions
This file was deleted.

rust/ql/test/query-tests/diagnostics/AstConsistencyCounts.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
| Multiple parents | 0 |
33
| Multiple primary QL classes | 0 |
44
| Multiple toStrings | 0 |
5+
| No location | 0 |

0 commit comments

Comments
 (0)