rap
当前支持的示例
memory leak
#![allow(unused)]
fn main() {
let buf = Box::new("buffer");
let _ptr = Box::into_raw(buf);
}
#![allow(unused)]
fn main() {
struct Proxy<T> { _p: *mut T }
let buf = Box::new("buffer");
let ptr = Box::into_raw(buf);
let _proxy = Proxy { _p:ptr };
}
use after free
#![allow(unused)]
fn main() {
fn create_vec() -> *mut Vec<i32> {
let mut v = Vec::new();
v.push(1);
&mut v as *mut Vec<i32>
}
}
#![allow(unused)]
fn main() {
let mut s = String::from("a tmp string");
let ptr = s.as_mut_ptr();
let _v = unsafe { Vec::from_raw_parts(ptr, s.len(), s.len()) };
}
#![allow(unused)]
fn main() {
let mut slot = ManuallyDrop::<Box<u8>>::new(Box::new(1));
unsafe { ManuallyDrop::drop(&mut slot); }
println!("{:?}", slot);
}
struct MyRef<'a> { a: &'a str, }
impl<'a> MyRef<'a> {
fn print(&self) { println!("{}", self.a); }
}
unsafe fn f<'a>(myref: MyRef<'a>) -> MyRef<'static> {
unsafe { std::mem::transmute(myref) }
}
fn main() {
let string = "Hello World!".to_string();
unsafe {
let my_ref = f(MyRef { a: &string });
drop(string);
my_ref.print();
}
}