Skip to content

Commit c6aa9e4

Browse files
committed
Rust: Fallback crate resolution
1 parent b42b737 commit c6aa9e4

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

rust/ql/lib/codeql/rust/internal/PathResolution.qll

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ abstract class ItemNode extends Locatable {
188188
crateDefEdge(this, name, result, kind)
189189
or
190190
crateDependencyEdge(this, name, result) and
191+
not declares(this, TTypeNamespace(), name) and
191192
kind.isInternal()
192193
or
193194
externCrateEdge(this, name, result) and
@@ -1153,6 +1154,11 @@ private class BuiltinSourceFile extends SourceFileItemNode {
11531154
pragma[nomagic]
11541155
private predicate crateDependencyEdge(SourceFileItemNode file, string name, CrateItemNode dep) {
11551156
exists(CrateItemNode c | dep = c.(Crate).getDependency(name) | file = c.getASourceFile())
1157+
or
1158+
// All files _should_ belong to a crate, but for those where we cannot identify the crate,
1159+
// we give access to all crates as a fallback.
1160+
not file = any(Crate c).getASourceFile() and
1161+
name = dep.getName()
11561162
}
11571163

11581164
private predicate useTreeDeclares(UseTree tree, string name) {
@@ -1482,20 +1488,13 @@ private predicate externCrateEdge(ExternCrateItemNode ec, string name, CrateItem
14821488

14831489
pragma[nomagic]
14841490
private predicate preludeItem(string name, ItemNode i) {
1485-
exists(Crate stdOrCore, string stdOrCoreName |
1486-
stdOrCore.getName() = stdOrCoreName and
1487-
stdOrCoreName = ["std", "core"]
1488-
|
1489-
name = stdOrCoreName and
1490-
i = stdOrCore
1491-
or
1492-
exists(ModuleLikeNode mod, ModuleItemNode prelude, ModuleItemNode rust |
1493-
mod = stdOrCore.getSourceFile() and
1494-
prelude = mod.getASuccessor("prelude") and
1495-
rust = prelude.getASuccessor(["rust_2015", "rust_2018", "rust_2021", "rust_2024"]) and
1496-
i = rust.getASuccessor(name) and
1497-
not name = ["super", "self"]
1498-
)
1491+
exists(Crate stdOrCore, ModuleLikeNode mod, ModuleItemNode prelude, ModuleItemNode rust |
1492+
stdOrCore.getName() = ["std", "core"] and
1493+
mod = stdOrCore.getSourceFile() and
1494+
prelude = mod.getASuccessor("prelude") and
1495+
rust = prelude.getASuccessor(["rust_2015", "rust_2018", "rust_2021", "rust_2024"]) and
1496+
i = rust.getASuccessor(name) and
1497+
not name = ["super", "self"]
14991498
)
15001499
}
15011500

0 commit comments

Comments
 (0)