Skip to content

Commit ff6b81f

Browse files
committed
Rust: Do no distinguish pub use from use in path resolution
1 parent 377fab2 commit ff6b81f

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1646,16 +1646,18 @@ private ItemNode resolveUseTreeListItemQualifier(
16461646

16471647
pragma[nomagic]
16481648
private ItemNode resolveUseTreeListItem(Use use, UseTree tree) {
1649-
tree = use.getUseTree() and
1650-
result = resolvePathCand(tree.getPath())
1651-
or
1652-
result = resolveUseTreeListItem(use, tree, tree.getPath(), _)
1649+
exists(Path path | path = tree.getPath() |
1650+
tree = use.getUseTree() and
1651+
result = resolvePathCand(path)
1652+
or
1653+
result = resolveUseTreeListItem(use, tree, path, _)
1654+
)
16531655
}
16541656

16551657
/** Holds if `use` imports `item` as `name`. */
16561658
pragma[nomagic]
16571659
private predicate useImportEdge(Use use, string name, ItemNode item, SuccessorKind kind) {
1658-
(if use.hasVisibility() then kind.isBoth() else kind.isInternal()) and
1660+
kind.isBoth() and
16591661
exists(UseTree tree, ItemNode used |
16601662
used = resolveUseTreeListItem(use, tree) and
16611663
not tree.hasUseTreeList() and
@@ -1673,7 +1675,10 @@ private predicate useImportEdge(Use use, string name, ItemNode item, SuccessorKi
16731675
item = used and
16741676
(
16751677
not tree.hasRename() and
1676-
name = item.getName()
1678+
exists(string pathName |
1679+
pathName = tree.getPath().getText() and
1680+
if pathName = "self" then name = item.getName() else name = pathName
1681+
)
16771682
or
16781683
exists(Rename rename | rename = tree.getRename() |
16791684
name = rename.getName().getText()

rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ pub fn f() {
77
use super::super::h; // $ item=I25
88
use super::g; // $ item=I9
99

10-
use super::nested6_f; // $ MISSING: item=I116
10+
use super::nested6_f; // $ item=I116

rust/ql/test/library-tests/path-resolution/path-resolution.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,7 @@ resolvePath
436436
| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:19:30 | SourceFile |
437437
| my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g |
438438
| my2/my3/mod.rs:10:5:10:9 | super | my2/mod.rs:1:1:19:30 | SourceFile |
439+
| my2/my3/mod.rs:10:5:10:20 | ...::nested6_f | my2/nested2.rs:15:9:17:9 | fn f |
439440
| my.rs:3:5:3:10 | nested | my.rs:1:1:1:15 | mod nested |
440441
| my.rs:3:5:3:13 | ...::g | my/nested.rs:19:1:22:1 | fn g |
441442
| my.rs:11:5:11:5 | g | my/nested.rs:19:1:22:1 | fn g |

0 commit comments

Comments
 (0)