Skip to content

Commit 8598d61

Browse files
committed
Rust: Add a test case involving a Drop method.
1 parent d1a0237 commit 8598d61

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
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:216:18:216:20 | ptr | deallocation.rs:210:3:210:25 | ...::drop_in_place | deallocation.rs:216:18:216:20 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:210:3:210:25 | ...::drop_in_place | invalid |
16+
| deallocation.rs:212:10:212:17 | self.ptr | deallocation.rs:212:10:212:17 | self.ptr | deallocation.rs:212:10:212:17 | self.ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:212:10:212:17 | self.ptr | invalid |
17+
| 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 |
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:210:3:210:25 | ...::drop_in_place | deallocation.rs:210:27:210:29 | [post] ptr | provenance | Src:MaD:6 MaD:6 |
44-
| deallocation.rs:210:27:210:29 | [post] ptr | deallocation.rs:216:18:216:20 | ptr | provenance | |
44+
| deallocation.rs:239:3:239:25 | ...::drop_in_place | deallocation.rs:239:27:239:29 | [post] ptr | provenance | Src:MaD:6 MaD:6 |
45+
| deallocation.rs:239:27:239:29 | [post] ptr | deallocation.rs:245:18:245: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:210:3:210:25 | ...::drop_in_place | semmle.label | ...::drop_in_place |
87-
| deallocation.rs:210:27:210:29 | [post] ptr | semmle.label | [post] ptr |
88-
| deallocation.rs:216:18:216:20 | ptr | semmle.label | ptr |
87+
| deallocation.rs:212:10:212:17 | self.ptr | semmle.label | self.ptr |
88+
| deallocation.rs:239:3:239:25 | ...::drop_in_place | semmle.label | ...::drop_in_place |
89+
| deallocation.rs:239:27:239:29 | [post] ptr | semmle.label | [post] ptr |
90+
| deallocation.rs:245:18:245:20 | ptr | semmle.label | ptr |
8991
subpaths

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,35 @@ pub fn test_ptr_drop(mode: i32) {
187187
}
188188
}
189189

190+
struct MyDropBuffer {
191+
ptr: *mut u8,
192+
}
193+
194+
impl MyDropBuffer {
195+
unsafe fn new() -> MyDropBuffer {
196+
let layout = std::alloc::Layout::from_size_align(1024, 1).unwrap();
197+
198+
MyDropBuffer {
199+
ptr: std::alloc::alloc(layout),
200+
}
201+
202+
// ...
203+
}
204+
}
205+
206+
impl Drop for MyDropBuffer {
207+
fn drop(&mut self) {
208+
let layout = std::alloc::Layout::from_size_align(1024, 1).unwrap();
209+
210+
unsafe {
211+
_ = *self.ptr;
212+
drop(*self.ptr); // $ MISSING: Source=drop SPURIOUS: Alert[rust/access-invalid-pointer]=drop
213+
_ = *self.ptr; // $ MISSING: Alert[rust/access-invalid-pointer]=drop
214+
std::alloc::dealloc(self.ptr, layout);
215+
}
216+
}
217+
}
218+
190219
// --- qhelp examples ---
191220

192221
fn do_something(s: &String) {

0 commit comments

Comments
 (0)