Skip to content

Commit 4ad7afd

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

File tree

7 files changed

+24
-9
lines changed

7 files changed

+24
-9
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/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ multipleCallTargets
1111
| test.rs:179:30:179:68 | ...::_print(...) |
1212
| test.rs:188:26:188:105 | ...::_print(...) |
1313
| test.rs:229:22:229:72 | ... .read_to_string(...) |
14+
| test.rs:664:22:664:43 | file.read(...) |
15+
| test.rs:673:22:673:41 | f1.read(...) |
1416
| test.rs:697:18:697:38 | ...::_print(...) |
1517
| test.rs:702:18:702:45 | ...::_print(...) |
1618
| test.rs:720:38:720:42 | ...::_print(...) |

rust/ql/test/library-tests/dataflow/sources/test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,7 @@ async fn test_async_std_file() -> std::io::Result<()> {
662662
{
663663
let mut buffer = [0u8; 100];
664664
let _bytes = file.read(&mut buffer).await?;
665-
sink(&buffer); // $ MISSING: hasTaintFlow="file.txt"
665+
sink(&buffer); // $ hasTaintFlow="file.txt"
666666
}
667667

668668
// --- OpenOptions ---
@@ -671,7 +671,7 @@ async fn test_async_std_file() -> std::io::Result<()> {
671671
let mut f1 = async_std::fs::OpenOptions::new().open("f1.txt").await?; // $ Alert[rust/summary/taint-sources]
672672
let mut buffer = [0u8; 1024];
673673
let _bytes = f1.read(&mut buffer).await?;
674-
sink(&buffer); // $ MISSING: hasTaintFlow="f1.txt"
674+
sink(&buffer); // $ hasTaintFlow="f1.txt"
675675
}
676676

677677
Ok(())

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 |
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
nonUniqueCertainType
2+
| sqlx.rs:158:13:158:24 | { ... } | E |
3+
| sqlx.rs:160:17:160:28 | { ... } | E |
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
nonUniqueCertainType
2+
| test_logging.rs:17:8:19:12 | { ... } | E |
3+
| test_logging.rs:29:8:31:12 | { ... } | E |
4+
| test_storage.rs:177:8:179:9 | { ... } | E |

0 commit comments

Comments
 (0)