Skip to content

Commit fc81187

Browse files
committed
Rust: Handle pub use reexports in path resolution
1 parent 7b66332 commit fc81187

3 files changed

Lines changed: 12 additions & 4 deletions

File tree

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

Lines changed: 9 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
}
@@ -588,9 +588,15 @@ private predicate fileImport(Module m, SourceFile f) {
588588
*/
589589
private predicate fileImportEdge(Module mod, string name, ItemNode item) {
590590
item.isPublic() and
591-
exists(SourceFile f |
592-
fileImport(mod, f) and
591+
exists(SourceFile f | fileImport(mod, f) |
593592
sourceFileEdge(f, name, item)
593+
or
594+
// `pub use` reexport
595+
exists(UseItemNode use |
596+
sourceFileEdge(f, _, use) and
597+
use.isPublic() and
598+
useImportEdge(use, name, item)
599+
)
594600
)
595601
}
596602

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)