// Proof of concept of CVE-2019-16140

#[allow(unused_variables)]
fn main() {
    let v = test();
}

fn test() -> Vec<u8> {
    // let mut s = String::from("lifetime test");
    let mut s = vec![1, 2, 3, 4, 5];
    let ptr = s.as_mut_ptr();
    unsafe { Vec::from_raw_parts(ptr, s.len(), s.len()) }
}

// // Use-after-free in chttp
// // This will cause a segmentation fault

// fn allocate(len: usize) -> Vec<u8> {
//     let mut slice = vec![1; len];
//     unsafe {
//         let vec = Vec::from_raw_parts(slice.as_mut_ptr(), len, slice.len());
//         // std::mem::forget(slice); // Fix
//         vec
//     }
// }

// fn main() {
//     let v = allocate(5);
//     println!("{:?}", v);
// }
