Skip to content

Commit 4c0d2ea

Browse files
committed
Fix
1 parent cb4b649 commit 4c0d2ea

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

libwasmvm/src/memory.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,14 @@ impl UnmanagedVector {
217217
match source {
218218
Some(data) => {
219219
let (ptr, len, cap) = {
220-
// Can be replaced with Vec::into_raw_parts when stable
221-
// https://doc.rust-lang.org/std/vec/struct.Vec.html#method.into_raw_parts
222-
let mut data = mem::ManuallyDrop::new(data);
223-
(data.as_mut_ptr(), data.len(), data.capacity())
220+
if data.capacity() == 0 {
221+
(std::ptr::null_mut::<u8>(), 0, 0)
222+
} else {
223+
// Can be replaced with Vec::into_raw_parts when stable
224+
// https://doc.rust-lang.org/std/vec/struct.Vec.html#method.into_raw_parts
225+
let mut data = mem::ManuallyDrop::new(data);
226+
(data.as_mut_ptr(), data.len(), data.capacity())
227+
}
224228
};
225229
Self {
226230
is_none: false,
@@ -261,6 +265,8 @@ impl UnmanagedVector {
261265
pub fn consume(self) -> Option<Vec<u8>> {
262266
if self.is_none {
263267
None
268+
} else if self.cap == 0 {
269+
Some(Vec::new())
264270
} else {
265271
Some(unsafe { Vec::from_raw_parts(self.ptr, self.len, self.cap) })
266272
}
@@ -349,7 +355,7 @@ mod test {
349355
// Empty data
350356
let x = UnmanagedVector::new(Some(vec![]));
351357
assert!(!x.is_none);
352-
assert_eq!(x.ptr as usize, 0x01); // We probably don't get any guarantee for this, but good to know where the 0x01 marker pointer can come from
358+
assert_eq!(x.ptr as usize, 0);
353359
assert_eq!(x.len, 0);
354360
assert_eq!(x.cap, 0);
355361

@@ -373,7 +379,7 @@ mod test {
373379
// Empty data
374380
let x = UnmanagedVector::some(vec![]);
375381
assert!(!x.is_none);
376-
assert_eq!(x.ptr as usize, 0x01); // We probably don't get any guarantee for this, but good to know where the 0x01 marker pointer can come from
382+
assert_eq!(x.ptr as usize, 0);
377383
assert_eq!(x.len, 0);
378384
assert_eq!(x.cap, 0);
379385
}

0 commit comments

Comments
 (0)