let ptr: *mut *mut raw::VecRepr = cast::transmute(self);
let td = get_tydesc::<T>();
if contains_managed::<T>() {
- vec_reserve_shared_actual(td, ptr as **raw::VecRepr, n as libc::size_t);
+ ::at_vec::raw::reserve_raw(td, ptr, n);
} else {
let alloc = n * sys::nonzero_size_of::<T>();
- *ptr = realloc_raw(*ptr as *mut c_void, alloc + size_of::<raw::VecRepr>())
+ let size = alloc + size_of::<raw::VecRepr>();
+ if alloc / sys::nonzero_size_of::<T>() != n || size < alloc {
+ fail!("vector size is too large: %u", n);
+ }
+ *ptr = realloc_raw(*ptr as *mut c_void, size)
as *mut raw::VecRepr;
(**ptr).unboxed.alloc = alloc;
}