mirror of
https://github.com/github/codeql.git
synced 2026-04-24 16:25:15 +02:00
Rust: Add a test case involving a Drop method.
This commit is contained in:
@@ -13,7 +13,8 @@
|
||||
| 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 |
|
||||
| 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 |
|
||||
| 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 |
|
||||
| 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 |
|
||||
| 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 |
|
||||
| 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 |
|
||||
edges
|
||||
| deallocation.rs:20:3:20:21 | ...::dealloc | deallocation.rs:20:23:20:24 | [post] m1 | provenance | Src:MaD:3 MaD:3 |
|
||||
| deallocation.rs:20:23:20:24 | [post] m1 | deallocation.rs:26:15:26:16 | m1 | provenance | |
|
||||
@@ -40,8 +41,8 @@ edges
|
||||
| deallocation.rs:125:23:125:38 | ...::null(...) | deallocation.rs:125:6:125:7 | p3 | provenance | |
|
||||
| deallocation.rs:176:3:176:25 | ...::drop_in_place | deallocation.rs:176:27:176:28 | [post] p1 | provenance | Src:MaD:6 MaD:6 |
|
||||
| deallocation.rs:176:27:176:28 | [post] p1 | deallocation.rs:180:15:180:16 | p1 | provenance | |
|
||||
| deallocation.rs:210:3:210:25 | ...::drop_in_place | deallocation.rs:210:27:210:29 | [post] ptr | provenance | Src:MaD:6 MaD:6 |
|
||||
| deallocation.rs:210:27:210:29 | [post] ptr | deallocation.rs:216:18:216:20 | ptr | provenance | |
|
||||
| deallocation.rs:239:3:239:25 | ...::drop_in_place | deallocation.rs:239:27:239:29 | [post] ptr | provenance | Src:MaD:6 MaD:6 |
|
||||
| deallocation.rs:239:27:239:29 | [post] ptr | deallocation.rs:245:18:245:20 | ptr | provenance | |
|
||||
models
|
||||
| 1 | Sink: lang:core; crate::ptr::read; pointer-access; Argument[0] |
|
||||
| 2 | Sink: lang:core; crate::ptr::write; pointer-access; Argument[0] |
|
||||
@@ -83,7 +84,8 @@ nodes
|
||||
| deallocation.rs:176:3:176:25 | ...::drop_in_place | semmle.label | ...::drop_in_place |
|
||||
| deallocation.rs:176:27:176:28 | [post] p1 | semmle.label | [post] p1 |
|
||||
| deallocation.rs:180:15:180:16 | p1 | semmle.label | p1 |
|
||||
| deallocation.rs:210:3:210:25 | ...::drop_in_place | semmle.label | ...::drop_in_place |
|
||||
| deallocation.rs:210:27:210:29 | [post] ptr | semmle.label | [post] ptr |
|
||||
| deallocation.rs:216:18:216:20 | ptr | semmle.label | ptr |
|
||||
| deallocation.rs:212:10:212:17 | self.ptr | semmle.label | self.ptr |
|
||||
| deallocation.rs:239:3:239:25 | ...::drop_in_place | semmle.label | ...::drop_in_place |
|
||||
| deallocation.rs:239:27:239:29 | [post] ptr | semmle.label | [post] ptr |
|
||||
| deallocation.rs:245:18:245:20 | ptr | semmle.label | ptr |
|
||||
subpaths
|
||||
|
||||
@@ -187,6 +187,35 @@ pub fn test_ptr_drop(mode: i32) {
|
||||
}
|
||||
}
|
||||
|
||||
struct MyDropBuffer {
|
||||
ptr: *mut u8,
|
||||
}
|
||||
|
||||
impl MyDropBuffer {
|
||||
unsafe fn new() -> MyDropBuffer {
|
||||
let layout = std::alloc::Layout::from_size_align(1024, 1).unwrap();
|
||||
|
||||
MyDropBuffer {
|
||||
ptr: std::alloc::alloc(layout),
|
||||
}
|
||||
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for MyDropBuffer {
|
||||
fn drop(&mut self) {
|
||||
let layout = std::alloc::Layout::from_size_align(1024, 1).unwrap();
|
||||
|
||||
unsafe {
|
||||
_ = *self.ptr;
|
||||
drop(*self.ptr); // $ MISSING: Source=drop SPURIOUS: Alert[rust/access-invalid-pointer]=drop
|
||||
_ = *self.ptr; // $ MISSING: Alert[rust/access-invalid-pointer]=drop
|
||||
std::alloc::dealloc(self.ptr, layout);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- qhelp examples ---
|
||||
|
||||
fn do_something(s: &String) {
|
||||
|
||||
Reference in New Issue
Block a user