Skip to content

Commit 7c5cdd9

Browse files
authored
Merge pull request #20001 from github/aibaars/trait-impl-int
Rust: fix missing canonical paths for trait impls on builtin numeric types
2 parents 51f6391 + d20bc98 commit 7c5cdd9

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,7 @@ class CrateItemNode extends ItemNode instanceof Crate {
380380
file = super.getSourceFile()
381381
)
382382
or
383+
c = this and
383384
this.getName() = "core" and
384385
child instanceof Builtins::BuiltinType
385386
}

rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ canonicalPath
2727
| regular.rs:57:1:63:1 | fn enum_match | test::regular::enum_match |
2828
| regular.rs:66:5:66:40 | fn is_alphanum | test::regular::is_alphanum |
2929
| regular.rs:69:1:71:1 | fn is_number_or_letter | test::regular::is_number_or_letter |
30+
| regular.rs:73:1:75:1 | trait Abs | test::regular::Abs |
31+
| regular.rs:74:5:74:25 | fn abs | <_ as test::regular::Abs>::abs |
32+
| regular.rs:77:1:85:1 | impl Abs for i32 { ... } | <core::i32 as test::regular::Abs> |
33+
| regular.rs:78:5:84:5 | fn abs | <core::i32 as test::regular::Abs>::abs |
3034
canonicalPaths
3135
| anonymous.rs:1:1:1:26 | use ...::Trait | None | None |
3236
| anonymous.rs:3:1:32:1 | fn canonicals | repo::test | crate::anonymous::canonicals |
@@ -70,6 +74,10 @@ canonicalPaths
7074
| regular.rs:65:1:67:1 | ExternBlock | None | None |
7175
| regular.rs:66:5:66:40 | fn is_alphanum | repo::test | ::is_alphanum |
7276
| regular.rs:69:1:71:1 | fn is_number_or_letter | repo::test | crate::regular::is_number_or_letter |
77+
| regular.rs:73:1:75:1 | trait Abs | repo::test | crate::regular::Abs |
78+
| regular.rs:74:5:74:25 | fn abs | repo::test | crate::regular::Abs::abs |
79+
| regular.rs:77:1:85:1 | impl Abs for i32 { ... } | None | None |
80+
| regular.rs:78:5:84:5 | fn abs | repo::test | <i32 as crate::regular::Abs>::abs |
7381
resolvedPaths
7482
| anonymous.rs:27:17:27:30 | OtherStruct {...} | None | None |
7583
| anonymous.rs:28:9:28:9 | s | None | None |
@@ -103,3 +111,6 @@ resolvedPaths
103111
| regular.rs:61:9:61:31 | ...::Variant3 {...} | repo::test | crate::regular::MyEnum::Variant3 |
104112
| regular.rs:70:14:70:24 | is_alphanum | repo::test | ::is_alphanum |
105113
| regular.rs:70:26:70:28 | chr | None | None |
114+
| regular.rs:79:12:79:15 | self | None | None |
115+
| regular.rs:80:14:80:17 | self | None | None |
116+
| regular.rs:82:13:82:16 | self | None | None |

rust/ql/test/extractor-tests/canonical_path/regular.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,17 @@ extern "C" {
6969
pub fn is_number_or_letter(chr: u8) -> bool {
7070
unsafe { is_alphanum(chr) }
7171
}
72+
73+
trait Abs {
74+
fn abs(self) -> Self;
75+
}
76+
77+
impl Abs for i32 {
78+
fn abs(self) -> Self {
79+
if self < 0 {
80+
-self
81+
} else {
82+
self
83+
}
84+
}
85+
}

0 commit comments

Comments
 (0)