Skip to content

Commit b426d84

Browse files
authored
Merge pull request #20164 from hvitved/rust/fix-bad-join
Rust: Fix bad join
2 parents e2b8d7b + 651e162 commit b426d84

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

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

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,6 +1464,18 @@ private predicate externCrateEdge(ExternCrateItemNode ec, string name, CrateItem
14641464
)
14651465
}
14661466

1467+
pragma[nomagic]
1468+
private predicate preludeItem(string name, ItemNode i) {
1469+
exists(Crate stdOrCore, ModuleLikeNode mod, ModuleItemNode prelude, ModuleItemNode rust |
1470+
stdOrCore.getName() = ["std", "core"] and
1471+
mod = stdOrCore.getSourceFile() and
1472+
prelude = mod.getASuccessorRec("prelude") and
1473+
rust = prelude.getASuccessorRec(["rust_2015", "rust_2018", "rust_2021", "rust_2024"]) and
1474+
i = rust.getASuccessorRec(name) and
1475+
not i instanceof Use
1476+
)
1477+
}
1478+
14671479
/**
14681480
* Holds if `i` is available inside `f` because it is reexported in
14691481
* [the `core` prelude][1] or [the `std` prelude][2].
@@ -1476,15 +1488,8 @@ private predicate externCrateEdge(ExternCrateItemNode ec, string name, CrateItem
14761488
*/
14771489
pragma[nomagic]
14781490
private predicate preludeEdge(SourceFile f, string name, ItemNode i) {
1479-
not declares(f, _, name) and
1480-
exists(Crate stdOrCore, ModuleLikeNode mod, ModuleItemNode prelude, ModuleItemNode rust |
1481-
stdOrCore.getName() = ["std", "core"] and
1482-
mod = stdOrCore.getSourceFile() and
1483-
prelude = mod.getASuccessorRec("prelude") and
1484-
rust = prelude.getASuccessorRec(["rust_2015", "rust_2018", "rust_2021", "rust_2024"]) and
1485-
i = rust.getASuccessorRec(name) and
1486-
not i instanceof Use
1487-
)
1491+
preludeItem(name, i) and
1492+
not declares(f, _, name)
14881493
}
14891494

14901495
pragma[nomagic]

0 commit comments

Comments
 (0)