Skip to content

Commit c5106f7

Browse files
committed
Rust: Handle pub use reexports in path resolution
1 parent 6cf83d3 commit c5106f7

File tree

3 files changed

+7
-4
lines changed

3 files changed

+7
-4
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ private class UseItemNode extends ItemNode instanceof Use {
460460

461461
override Namespace getNamespace() { none() }
462462

463-
override Visibility getVisibility() { none() }
463+
override Visibility getVisibility() { result = Use.super.getVisibility() }
464464

465465
override TypeParam getTypeParam(int i) { none() }
466466
}
@@ -586,11 +586,12 @@ private predicate fileImport(Module m, SourceFile f) {
586586
* Holds if `mod` is a `mod name;` item targeting a file resulting in `item` being
587587
* in scope under the name `name`.
588588
*/
589+
pragma[nomagic]
589590
private predicate fileImportEdge(Module mod, string name, ItemNode item) {
590591
item.isPublic() and
591-
exists(SourceFile f |
592+
exists(SourceFileItemNode f |
592593
fileImport(mod, f) and
593-
sourceFileEdge(f, name, item)
594+
item = f.getASuccessor(name)
594595
)
595596
}
596597

rust/ql/test/library-tests/path-resolution/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,5 +495,5 @@ fn main() {
495495
m15::f(); // $ item=I75
496496
m16::f(); // $ item=I83
497497
m17::f(); // $ item=I99
498-
nested6::f(); // $ MISSING: item=I116
498+
nested6::f(); // $ item=I116
499499
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,8 @@ resolvePath
251251
| main.rs:496:5:496:10 | ...::f | main.rs:417:5:441:5 | fn f |
252252
| main.rs:497:5:497:7 | m17 | main.rs:444:1:474:1 | mod m17 |
253253
| main.rs:497:5:497:10 | ...::f | main.rs:468:5:473:5 | fn f |
254+
| main.rs:498:5:498:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
255+
| main.rs:498:5:498:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
254256
| my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
255257
| my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
256258
| my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |

0 commit comments

Comments
 (0)