Skip to content

Commit ce7a0fd

Browse files
committed
Rust: Test for sinks inside sources.
1 parent 9ae271a commit ce7a0fd

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
| deallocation.rs:131:14:131:15 | p2 | deallocation.rs:124:21:124:42 | ...::dangling_mut | deallocation.rs:131:14:131:15 | p2 | This operation dereferences a pointer that may be $@. | deallocation.rs:124:21:124:42 | ...::dangling_mut | invalid |
1414
| deallocation.rs:132:14:132:15 | p3 | deallocation.rs:125:23:125:36 | ...::null | deallocation.rs:132:14:132:15 | p3 | This operation dereferences a pointer that may be $@. | deallocation.rs:125:23:125:36 | ...::null | invalid |
1515
| deallocation.rs:180:15:180:16 | p1 | deallocation.rs:176:3:176:25 | ...::drop_in_place | deallocation.rs:180:15:180:16 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:176:3:176:25 | ...::drop_in_place | invalid |
16-
| deallocation.rs:245:18:245:20 | ptr | deallocation.rs:239:3:239:25 | ...::drop_in_place | deallocation.rs:245:18:245:20 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:239:3:239:25 | ...::drop_in_place | invalid |
16+
| deallocation.rs:189:29:189:30 | p3 | deallocation.rs:189:29:189:30 | p3 | deallocation.rs:189:29:189:30 | p3 | This operation dereferences a pointer that may be $@. | deallocation.rs:189:29:189:30 | p3 | invalid |
17+
| deallocation.rs:248:18:248:20 | ptr | deallocation.rs:242:3:242:25 | ...::drop_in_place | deallocation.rs:248:18:248:20 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:242:3:242:25 | ...::drop_in_place | invalid |
1718
edges
1819
| deallocation.rs:20:3:20:21 | ...::dealloc | deallocation.rs:20:23:20:24 | [post] m1 | provenance | Src:MaD:3 MaD:3 |
1920
| deallocation.rs:20:23:20:24 | [post] m1 | deallocation.rs:26:15:26:16 | m1 | provenance | |
@@ -40,8 +41,8 @@ edges
4041
| deallocation.rs:125:23:125:38 | ...::null(...) | deallocation.rs:125:6:125:7 | p3 | provenance | |
4142
| deallocation.rs:176:3:176:25 | ...::drop_in_place | deallocation.rs:176:27:176:28 | [post] p1 | provenance | Src:MaD:6 MaD:6 |
4243
| deallocation.rs:176:27:176:28 | [post] p1 | deallocation.rs:180:15:180:16 | p1 | provenance | |
43-
| deallocation.rs:239:3:239:25 | ...::drop_in_place | deallocation.rs:239:27:239:29 | [post] ptr | provenance | Src:MaD:6 MaD:6 |
44-
| deallocation.rs:239:27:239:29 | [post] ptr | deallocation.rs:245:18:245:20 | ptr | provenance | |
44+
| deallocation.rs:242:3:242:25 | ...::drop_in_place | deallocation.rs:242:27:242:29 | [post] ptr | provenance | Src:MaD:6 MaD:6 |
45+
| deallocation.rs:242:27:242:29 | [post] ptr | deallocation.rs:248:18:248:20 | ptr | provenance | |
4546
models
4647
| 1 | Sink: lang:core; crate::ptr::read; pointer-access; Argument[0] |
4748
| 2 | Sink: lang:core; crate::ptr::write; pointer-access; Argument[0] |
@@ -83,7 +84,8 @@ nodes
8384
| deallocation.rs:176:3:176:25 | ...::drop_in_place | semmle.label | ...::drop_in_place |
8485
| deallocation.rs:176:27:176:28 | [post] p1 | semmle.label | [post] p1 |
8586
| deallocation.rs:180:15:180:16 | p1 | semmle.label | p1 |
86-
| deallocation.rs:239:3:239:25 | ...::drop_in_place | semmle.label | ...::drop_in_place |
87-
| deallocation.rs:239:27:239:29 | [post] ptr | semmle.label | [post] ptr |
88-
| deallocation.rs:245:18:245:20 | ptr | semmle.label | ptr |
87+
| deallocation.rs:189:29:189:30 | p3 | semmle.label | p3 |
88+
| deallocation.rs:242:3:242:25 | ...::drop_in_place | semmle.label | ...::drop_in_place |
89+
| deallocation.rs:242:27:242:29 | [post] ptr | semmle.label | [post] ptr |
90+
| deallocation.rs:248:18:248:20 | ptr | semmle.label | ptr |
8991
subpaths

rust/ql/test/query-tests/security/CWE-825/deallocation.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ pub fn test_drop() {
163163
pub fn test_ptr_drop(mode: i32) {
164164
let layout = std::alloc::Layout::new::<Vec<i64>>();
165165
unsafe {
166-
let p1 = std::alloc::alloc(layout) as *mut Vec<i64>; // *mut i64
166+
let p1 = std::alloc::alloc(layout) as *mut Vec<i64>;
167167
let p2 = p1;
168168

169169
*p1 = vec!(1, 2, 3);
@@ -184,6 +184,9 @@ pub fn test_ptr_drop(mode: i32) {
184184
let v4 = (*p2)[0]; // $ MISSING: Alert
185185
println!(" v4 = {v4} (!)"); // corrupt in practice
186186
}
187+
188+
let p3 = std::alloc::alloc(layout) as *mut Vec<i64>;
189+
std::ptr::drop_in_place((*p3).as_mut_ptr()); // $ SPURIOUS: Alert[rust/access-invalid-pointer]
187190
}
188191
}
189192

0 commit comments

Comments
 (0)