Skip to content

Commit 5c0300c

Browse files
authored
Merge pull request #20224 from hvitved/rust/remove-extractor-resolution-references
Rust: Remove references to `getResolvedPath` and `getExtendedCanonicalPath`
2 parents 6951f58 + 51fb215 commit 5c0300c

File tree

7 files changed

+20
-212
lines changed

7 files changed

+20
-212
lines changed

rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,6 @@ module Input implements InputSig<Location, RustDataFlow> {
1919
/** Gets the associated call. */
2020
abstract CallExprBase getCall();
2121

22-
/** Holds if the associated call resolves to `crate, path`. */
23-
final predicate callResolvesTo(string crate, string path) {
24-
exists(Resolvable r |
25-
r = CallExprBaseImpl::getCallResolvable(this.getCall()) and
26-
path = r.getResolvedPath()
27-
|
28-
crate = r.getResolvedCrateOrigin()
29-
or
30-
not r.hasResolvedCrateOrigin() and
31-
crate = ""
32-
)
33-
}
34-
3522
/** Holds if the associated call resolves to `path`. */
3623
final predicate callResolvesTo(string path) {
3724
path = this.getCall().getStaticTarget().(Addressable).getCanonicalPath()

rust/ql/src/queries/telemetry/RustAnalyzerComparison.qll

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ import rust
99

1010
pragma[nomagic]
1111
private predicate resolvesAsItem(Resolvable r, Item i) {
12-
r.getResolvedPath() = i.getExtendedCanonicalPath() and
13-
(
14-
r.getResolvedCrateOrigin() = i.getCrateOrigin()
15-
or
16-
not r.hasResolvedCrateOrigin() and not i.hasCrateOrigin()
17-
)
12+
none()
13+
// r.getResolvedPath() = i.getExtendedCanonicalPath() and
14+
// (
15+
// r.getResolvedCrateOrigin() = i.getCrateOrigin()
16+
// or
17+
// not r.hasResolvedCrateOrigin() and not i.hasCrateOrigin()
18+
// )
1819
}
1920

2021
private signature module ResolvableSig {
@@ -102,7 +103,10 @@ private module PathResolution implements ResolvableSig {
102103
}
103104

104105
private module RustAnalyzerPathResolution implements CompareSig<PathResolution> {
105-
predicate isResolvable(PathResolution::Source s) { s.hasResolvedPath() }
106+
predicate isResolvable(PathResolution::Source s) {
107+
none()
108+
//s.hasResolvedPath()
109+
}
106110

107111
Item resolve(PathResolution::Source s) { resolvesAsItem(s, result) }
108112
}
@@ -157,6 +161,7 @@ private module QlCallGraph implements CompareSig<CallGraph> {
157161
module CallGraphCompare = Compare<CallGraph, RustAnalyzerCallGraph, QlCallGraph>;
158162

159163
predicate qlMissingCanonicalPath(Addressable a, string path) {
160-
path = a.getExtendedCanonicalPath() and
161-
not exists(a.getCanonicalPath(_))
164+
none()
165+
// path = a.getExtendedCanonicalPath() and
166+
// not exists(a.getCanonicalPath(_))
162167
}
Lines changed: 0 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
canonicalPath
21
| anonymous.rs:3:1:32:1 | fn canonicals | test::anonymous::canonicals |
32
| anonymous.rs:34:1:36:1 | fn other | test::anonymous::other |
43
| {EXTERNAL LOCATION} | fn trim | <core::str>::trim |
@@ -31,86 +30,3 @@ canonicalPath
3130
| regular.rs:74:5:74:25 | fn abs | <_ as test::regular::Abs>::abs |
3231
| regular.rs:77:1:85:1 | impl Abs for i32 { ... } | <core::i32 as test::regular::Abs> |
3332
| regular.rs:78:5:84:5 | fn abs | <core::i32 as test::regular::Abs>::abs |
34-
canonicalPaths
35-
| anonymous.rs:1:1:1:26 | use ...::Trait | None | None |
36-
| anonymous.rs:3:1:32:1 | fn canonicals | repo::test | crate::anonymous::canonicals |
37-
| anonymous.rs:4:5:4:23 | struct OtherStruct | None | None |
38-
| anonymous.rs:6:5:8:5 | trait OtherTrait | None | None |
39-
| anonymous.rs:7:9:7:20 | fn g | None | None |
40-
| anonymous.rs:10:5:12:5 | impl OtherTrait for OtherStruct { ... } | None | None |
41-
| anonymous.rs:11:9:11:22 | fn g | None | None |
42-
| anonymous.rs:14:5:16:5 | impl OtherTrait for ...::Struct { ... } | None | None |
43-
| anonymous.rs:15:9:15:22 | fn g | None | None |
44-
| anonymous.rs:18:5:20:5 | impl ...::Trait for OtherStruct { ... } | None | None |
45-
| anonymous.rs:19:9:19:22 | fn f | None | None |
46-
| anonymous.rs:22:5:24:5 | fn nested | None | None |
47-
| anonymous.rs:23:9:23:27 | struct OtherStruct | None | None |
48-
| anonymous.rs:26:5:31:5 | fn usage | None | None |
49-
| anonymous.rs:34:1:36:1 | fn other | repo::test | crate::anonymous::other |
50-
| anonymous.rs:35:5:35:23 | struct OtherStruct | None | None |
51-
| lib.rs:1:1:1:18 | mod anonymous | repo::test | crate::anonymous |
52-
| lib.rs:2:1:2:16 | mod regular | repo::test | crate::regular |
53-
| regular.rs:1:1:2:18 | struct Struct | repo::test | crate::regular::Struct |
54-
| regular.rs:2:12:2:17 | fn eq | repo::test | <crate::regular::Struct as crate::cmp::PartialEq>::eq |
55-
| regular.rs:2:12:2:17 | impl ...::Eq for Struct::<...> { ... } | None | None |
56-
| regular.rs:2:12:2:17 | impl ...::PartialEq for Struct::<...> { ... } | None | None |
57-
| regular.rs:4:1:6:1 | trait Trait | repo::test | crate::regular::Trait |
58-
| regular.rs:5:5:5:16 | fn f | repo::test | crate::regular::Trait::f |
59-
| regular.rs:8:1:10:1 | impl Trait for Struct { ... } | None | None |
60-
| regular.rs:9:5:9:18 | fn f | repo::test | <crate::regular::Struct as crate::regular::Trait>::f |
61-
| regular.rs:12:1:14:1 | impl Struct { ... } | None | None |
62-
| regular.rs:13:5:13:18 | fn g | repo::test | <crate::regular::Struct>::g |
63-
| regular.rs:16:1:18:1 | trait TraitWithBlanketImpl | repo::test | crate::regular::TraitWithBlanketImpl |
64-
| regular.rs:17:5:17:16 | fn h | repo::test | crate::regular::TraitWithBlanketImpl::h |
65-
| regular.rs:20:1:22:1 | impl TraitWithBlanketImpl for T { ... } | None | None |
66-
| regular.rs:21:5:21:18 | fn h | repo::test | <_ as crate::regular::TraitWithBlanketImpl>::h |
67-
| regular.rs:24:1:24:12 | fn free | repo::test | crate::regular::free |
68-
| regular.rs:26:1:32:1 | fn usage | repo::test | crate::regular::usage |
69-
| regular.rs:34:1:38:1 | enum MyEnum | repo::test | crate::regular::MyEnum |
70-
| regular.rs:40:1:46:1 | fn enum_qualified_usage | repo::test | crate::regular::enum_qualified_usage |
71-
| regular.rs:48:1:55:1 | fn enum_unqualified_usage | repo::test | crate::regular::enum_unqualified_usage |
72-
| regular.rs:51:5:51:18 | use MyEnum::* | None | None |
73-
| regular.rs:57:1:63:1 | fn enum_match | repo::test | crate::regular::enum_match |
74-
| regular.rs:65:1:67:1 | ExternBlock | None | None |
75-
| regular.rs:66:5:66:40 | fn is_alphanum | repo::test | ::is_alphanum |
76-
| regular.rs:69:1:71:1 | fn is_number_or_letter | repo::test | crate::regular::is_number_or_letter |
77-
| regular.rs:73:1:75:1 | trait Abs | repo::test | crate::regular::Abs |
78-
| regular.rs:74:5:74:25 | fn abs | repo::test | crate::regular::Abs::abs |
79-
| regular.rs:77:1:85:1 | impl Abs for i32 { ... } | None | None |
80-
| regular.rs:78:5:84:5 | fn abs | repo::test | <i32 as crate::regular::Abs>::abs |
81-
resolvedPaths
82-
| anonymous.rs:27:17:27:30 | OtherStruct {...} | None | None |
83-
| anonymous.rs:28:9:28:9 | s | None | None |
84-
| anonymous.rs:28:9:28:13 | s.f() | None | None |
85-
| anonymous.rs:29:9:29:9 | s | None | None |
86-
| anonymous.rs:29:9:29:13 | s.g() | None | None |
87-
| anonymous.rs:30:9:30:14 | nested | None | None |
88-
| regular.rs:1:1:1:24 | other | None | None |
89-
| regular.rs:1:1:1:24 | self | None | None |
90-
| regular.rs:27:13:27:21 | Struct {...} | repo::test | crate::regular::Struct |
91-
| regular.rs:28:5:28:5 | s | None | None |
92-
| regular.rs:28:5:28:9 | s.f() | repo::test | <crate::regular::Struct as crate::regular::Trait>::f |
93-
| regular.rs:29:5:29:5 | s | None | None |
94-
| regular.rs:29:5:29:9 | s.g() | repo::test | <crate::regular::Struct>::g |
95-
| regular.rs:30:5:30:5 | s | None | None |
96-
| regular.rs:30:5:30:9 | s.h() | repo::test | <_ as crate::regular::TraitWithBlanketImpl>::h |
97-
| regular.rs:31:5:31:8 | free | repo::test | crate::regular::free |
98-
| regular.rs:41:9:41:26 | ...::None::<...> | lang:core | crate::option::Option::None |
99-
| regular.rs:42:9:42:20 | ...::Some | lang:core | crate::option::Option::Some |
100-
| regular.rs:43:9:43:24 | ...::Variant1 | repo::test | crate::regular::MyEnum::Variant1 |
101-
| regular.rs:44:9:44:24 | ...::Variant2 | repo::test | crate::regular::MyEnum::Variant2 |
102-
| regular.rs:45:9:45:33 | ...::Variant3 {...} | repo::test | crate::regular::MyEnum::Variant3 |
103-
| regular.rs:49:9:49:18 | None::<...> | lang:core | crate::option::Option::None |
104-
| regular.rs:50:9:50:12 | Some | lang:core | crate::option::Option::Some |
105-
| regular.rs:52:9:52:16 | Variant1 | repo::test | crate::regular::MyEnum::Variant1 |
106-
| regular.rs:53:9:53:16 | Variant2 | repo::test | crate::regular::MyEnum::Variant2 |
107-
| regular.rs:54:9:54:25 | Variant3 {...} | repo::test | crate::regular::MyEnum::Variant3 |
108-
| regular.rs:58:11:58:11 | e | None | None |
109-
| regular.rs:59:9:59:24 | ...::Variant1 | repo::test | crate::regular::MyEnum::Variant1 |
110-
| regular.rs:60:9:60:27 | ...::Variant2(...) | repo::test | crate::regular::MyEnum::Variant2 |
111-
| regular.rs:61:9:61:31 | ...::Variant3 {...} | repo::test | crate::regular::MyEnum::Variant3 |
112-
| regular.rs:70:14:70:24 | is_alphanum | repo::test | ::is_alphanum |
113-
| regular.rs:70:26:70:28 | chr | None | None |
114-
| regular.rs:79:12:79:15 | self | None | None |
115-
| regular.rs:80:14:80:17 | self | None | None |
116-
| regular.rs:82:13:82:16 | self | None | None |

rust/ql/test/extractor-tests/canonical_path/canonical_paths.ql

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,3 @@ query predicate canonicalPath(Addressable a, string path) {
1717
) and
1818
path = a.getCanonicalPath(_)
1919
}
20-
21-
query predicate canonicalPaths(Item i, string origin, string path) {
22-
toBeTested(i) and
23-
(
24-
origin = i.getCrateOrigin()
25-
or
26-
not i.hasCrateOrigin() and origin = "None"
27-
) and
28-
(
29-
path = i.getExtendedCanonicalPath()
30-
or
31-
not i.hasExtendedCanonicalPath() and path = "None"
32-
)
33-
}
34-
35-
query predicate resolvedPaths(Resolvable e, string origin, string path) {
36-
toBeTested(e) and
37-
(
38-
origin = e.getResolvedCrateOrigin()
39-
or
40-
not e.hasResolvedCrateOrigin() and origin = "None"
41-
) and
42-
(
43-
path = e.getResolvedPath()
44-
or
45-
not e.hasResolvedPath() and path = "None"
46-
)
47-
}
Lines changed: 0 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
canonicalPath
21
| anonymous.rs:6:1:35:1 | fn canonicals | test::anonymous::canonicals |
32
| anonymous.rs:37:1:39:1 | fn other | test::anonymous::other |
43
| {EXTERNAL LOCATION} | fn trim | <core::str>::trim |
@@ -25,74 +24,3 @@ canonicalPath
2524
| regular.rs:43:1:49:1 | fn enum_qualified_usage | test::regular::enum_qualified_usage |
2625
| regular.rs:51:1:58:1 | fn enum_unqualified_usage | test::regular::enum_unqualified_usage |
2726
| regular.rs:60:1:66:1 | fn enum_match | test::regular::enum_match |
28-
canonicalPaths
29-
| anonymous.rs:4:1:4:26 | use ...::Trait | None | None |
30-
| anonymous.rs:6:1:35:1 | fn canonicals | None | None |
31-
| anonymous.rs:7:5:7:23 | struct OtherStruct | None | None |
32-
| anonymous.rs:9:5:11:5 | trait OtherTrait | None | None |
33-
| anonymous.rs:10:9:10:20 | fn g | None | None |
34-
| anonymous.rs:13:5:15:5 | impl OtherTrait for OtherStruct { ... } | None | None |
35-
| anonymous.rs:14:9:14:22 | fn g | None | None |
36-
| anonymous.rs:17:5:19:5 | impl OtherTrait for ...::Struct { ... } | None | None |
37-
| anonymous.rs:18:9:18:22 | fn g | None | None |
38-
| anonymous.rs:21:5:23:5 | impl ...::Trait for OtherStruct { ... } | None | None |
39-
| anonymous.rs:22:9:22:22 | fn f | None | None |
40-
| anonymous.rs:25:5:27:5 | fn nested | None | None |
41-
| anonymous.rs:26:9:26:27 | struct OtherStruct | None | None |
42-
| anonymous.rs:29:5:34:5 | fn usage | None | None |
43-
| anonymous.rs:37:1:39:1 | fn other | None | None |
44-
| anonymous.rs:38:5:38:23 | struct OtherStruct | None | None |
45-
| lib.rs:1:1:1:18 | mod anonymous | None | None |
46-
| lib.rs:2:1:2:16 | mod regular | None | None |
47-
| regular.rs:4:1:5:18 | struct Struct | None | None |
48-
| regular.rs:5:12:5:17 | fn eq | None | None |
49-
| regular.rs:5:12:5:17 | impl ...::Eq for Struct::<...> { ... } | None | None |
50-
| regular.rs:5:12:5:17 | impl ...::PartialEq for Struct::<...> { ... } | None | None |
51-
| regular.rs:7:1:9:1 | trait Trait | None | None |
52-
| regular.rs:8:5:8:16 | fn f | None | None |
53-
| regular.rs:11:1:13:1 | impl Trait for Struct { ... } | None | None |
54-
| regular.rs:12:5:12:18 | fn f | None | None |
55-
| regular.rs:15:1:17:1 | impl Struct { ... } | None | None |
56-
| regular.rs:16:5:16:18 | fn g | None | None |
57-
| regular.rs:19:1:21:1 | trait TraitWithBlanketImpl | None | None |
58-
| regular.rs:20:5:20:16 | fn h | None | None |
59-
| regular.rs:23:1:25:1 | impl TraitWithBlanketImpl for T { ... } | None | None |
60-
| regular.rs:24:5:24:18 | fn h | None | None |
61-
| regular.rs:27:1:27:12 | fn free | None | None |
62-
| regular.rs:29:1:35:1 | fn usage | None | None |
63-
| regular.rs:37:1:41:1 | enum MyEnum | None | None |
64-
| regular.rs:43:1:49:1 | fn enum_qualified_usage | None | None |
65-
| regular.rs:51:1:58:1 | fn enum_unqualified_usage | None | None |
66-
| regular.rs:54:5:54:18 | use MyEnum::* | None | None |
67-
| regular.rs:60:1:66:1 | fn enum_match | None | None |
68-
resolvedPaths
69-
| anonymous.rs:30:17:30:30 | OtherStruct {...} | None | None |
70-
| anonymous.rs:31:9:31:9 | s | None | None |
71-
| anonymous.rs:31:9:31:13 | s.f() | None | None |
72-
| anonymous.rs:32:9:32:9 | s | None | None |
73-
| anonymous.rs:32:9:32:13 | s.g() | None | None |
74-
| anonymous.rs:33:9:33:14 | nested | None | None |
75-
| regular.rs:4:1:4:24 | other | None | None |
76-
| regular.rs:4:1:4:24 | self | None | None |
77-
| regular.rs:30:13:30:21 | Struct {...} | None | None |
78-
| regular.rs:31:5:31:5 | s | None | None |
79-
| regular.rs:31:5:31:9 | s.f() | None | None |
80-
| regular.rs:32:5:32:5 | s | None | None |
81-
| regular.rs:32:5:32:9 | s.g() | None | None |
82-
| regular.rs:33:5:33:5 | s | None | None |
83-
| regular.rs:33:5:33:9 | s.h() | None | None |
84-
| regular.rs:34:5:34:8 | free | None | None |
85-
| regular.rs:44:9:44:26 | ...::None::<...> | None | None |
86-
| regular.rs:45:9:45:20 | ...::Some | None | None |
87-
| regular.rs:46:9:46:24 | ...::Variant1 | None | None |
88-
| regular.rs:47:9:47:24 | ...::Variant2 | None | None |
89-
| regular.rs:48:9:48:33 | ...::Variant3 {...} | None | None |
90-
| regular.rs:52:9:52:18 | None::<...> | None | None |
91-
| regular.rs:53:9:53:12 | Some | None | None |
92-
| regular.rs:55:9:55:16 | Variant1 | None | None |
93-
| regular.rs:56:9:56:16 | Variant2 | None | None |
94-
| regular.rs:57:9:57:25 | Variant3 {...} | None | None |
95-
| regular.rs:61:11:61:11 | e | None | None |
96-
| regular.rs:62:9:62:24 | ...::Variant1 | None | None |
97-
| regular.rs:63:9:63:27 | ...::Variant2(...) | None | None |
98-
| regular.rs:64:9:64:31 | ...::Variant3 {...} | None | None |

rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ module MyFlowConfig implements DataFlow::ConfigSig {
1010
predicate isSource(DataFlow::Node source) { source instanceof ThreatModelSource }
1111

1212
predicate isSink(DataFlow::Node sink) {
13-
any(CallExpr call | call.getFunction().(PathExpr).getResolvedPath().matches("%::sink"))
14-
.getArgList()
15-
.getAnArg() = sink.asExpr().getExpr()
13+
any(CallExpr call |
14+
call.getFunction().(PathExpr).getPath().getSegment().getIdentifier().getText() = "sink"
15+
).getArgList().getAnArg() = sink.asExpr().getExpr()
1616
}
1717

1818
predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) {

rust/ql/test/library-tests/sensitivedata/SensitiveData.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ module SensitiveDataConfig implements DataFlow::ConfigSig {
1111
predicate isSource(DataFlow::Node source) { source instanceof SensitiveData }
1212

1313
predicate isSink(DataFlow::Node sink) {
14-
any(CallExpr call | call.getFunction().(PathExpr).getResolvedPath() = "crate::test::sink")
15-
.getArgList()
16-
.getAnArg() = sink.asExpr().getExpr()
14+
any(CallExpr call |
15+
call.getFunction().(PathExpr).getPath().getSegment().getIdentifier().getText() = "sink"
16+
).getArgList().getAnArg() = sink.asExpr().getExpr()
1717
}
1818
}
1919

0 commit comments

Comments
 (0)