diff --git a/utils/zerovec/src/map2d/databake.rs b/utils/zerovec/src/map2d/databake.rs index b505539772e..c5b9aca5463 100644 --- a/utils/zerovec/src/map2d/databake.rs +++ b/utils/zerovec/src/map2d/databake.rs @@ -52,7 +52,7 @@ fn test_baked_map() { crate::ZeroMap2d::from_parts_unchecked( unsafe { crate::VarZeroVec::from_bytes_unchecked( - b"arcaz\0cu\0en\0ff\0grckk\0ku\0ky\0lifmanmn\0pa\0palsd\0tg\0ug\0unruz\0yuezh\0" + b"\x0E\0\0\0\0\0\x05\0\x07\0\t\0\x0B\0\x10\0\x12\0\x14\0\x1C\0\x1E\0#\0%\0'\0,\0arcazcuenffgrckkkukylifmanmnpapalsdtgugunruzyuezh" ) }, unsafe { @@ -62,12 +62,12 @@ fn test_baked_map() { }, unsafe { crate::VarZeroVec::from_bytes_unchecked( - b"NbatPalmArabGlagShawAdlmLinbArabArabYeziArabLatnLimbNkooMongArabPhlpDevaKhojSindArabCyrlDevaArabHansBopoHanbHant" + b"\x1C\0\0\0\0\0\x04\0\x08\0\x0C\0\x10\0\x14\0\x18\0\x1C\0 \0$\0(\0,\x000\x004\08\0<\0@\0D\0H\0L\0P\0T\0X\0\\\0`\0d\0h\0l\0NbatPalmArabGlagShawAdlmLinbArabArabYeziArabLatnLimbNkooMongArabPhlpDevaKhojSindArabCyrlDevaArabHansBopoHanbHant" ) }, unsafe { crate::VarZeroVec::from_bytes_unchecked( - b"JO\0SY\0IR\0BG\0GB\0GN\0GR\0CN\0IQ\0GE\0CN\0TR\0IN\0GN\0CN\0PK\0CN\0IN\0IN\0IN\0PK\0KZ\0NP\0AF\0CN\0TW\0TW\0TW\0" + b"\x1C\0\0\0\0\0\x02\0\x04\0\x06\0\x08\0\n\0\x0C\0\x0E\0\x10\0\x12\0\x14\0\x16\0\x18\0\x1A\0\x1C\0\x1E\0 \0\"\0$\0&\0(\0*\0,\0.\x000\x002\x004\x006\0JOSYIRBGGBGNGRCNIQGECNTRINGNCNPKCNINININPKKZNPAFCNTWTWTW" ) }, ) @@ -85,7 +85,7 @@ fn test_baked_borrowed_map() { crate::maps::ZeroMap2dBorrowed::from_parts_unchecked( unsafe { crate::VarZeroSlice::from_bytes_unchecked( - b"arcaz\0cu\0en\0ff\0grckk\0ku\0ky\0lifmanmn\0pa\0palsd\0tg\0ug\0unruz\0yuezh\0" + b"\x0E\0\0\0\0\0\x05\0\x07\0\t\0\x0B\0\x10\0\x12\0\x14\0\x1C\0\x1E\0#\0%\0'\0,\0arcazcuenffgrckkkukylifmanmnpapalsdtgugunruzyuezh" ) }, unsafe { @@ -95,12 +95,12 @@ fn test_baked_borrowed_map() { }, unsafe { crate::VarZeroSlice::from_bytes_unchecked( - b"NbatPalmArabGlagShawAdlmLinbArabArabYeziArabLatnLimbNkooMongArabPhlpDevaKhojSindArabCyrlDevaArabHansBopoHanbHant" + b"\x1C\0\0\0\0\0\x04\0\x08\0\x0C\0\x10\0\x14\0\x18\0\x1C\0 \0$\0(\0,\x000\x004\08\0<\0@\0D\0H\0L\0P\0T\0X\0\\\0`\0d\0h\0l\0NbatPalmArabGlagShawAdlmLinbArabArabYeziArabLatnLimbNkooMongArabPhlpDevaKhojSindArabCyrlDevaArabHansBopoHanbHant" ) }, unsafe { crate::VarZeroSlice::from_bytes_unchecked( - b"JO\0SY\0IR\0BG\0GB\0GN\0GR\0CN\0IQ\0GE\0CN\0TR\0IN\0GN\0CN\0PK\0CN\0IN\0IN\0IN\0PK\0KZ\0NP\0AF\0CN\0TW\0TW\0TW\0" + b"\x1C\0\0\0\0\0\x02\0\x04\0\x06\0\x08\0\n\0\x0C\0\x0E\0\x10\0\x12\0\x14\0\x16\0\x18\0\x1A\0\x1C\0\x1E\0 \0\"\0$\0&\0(\0*\0,\0.\x000\x002\x004\x006\0JOSYIRBGGBGNGRCNIQGECNTRINGNCNPKCNINININPKKZNPAFCNTWTWTW" ) }, ) diff --git a/utils/zerovec/src/varzerovec/owned.rs b/utils/zerovec/src/varzerovec/owned.rs index 76de4876097..0990a5d91d5 100644 --- a/utils/zerovec/src/varzerovec/owned.rs +++ b/utils/zerovec/src/varzerovec/owned.rs @@ -279,7 +279,7 @@ impl VarZeroVecOwned { any::type_name::() ); } - self.entire_slice.reserve(shift as usize); + self.entire_slice.resize(new_slice_len, 0); } // Now that we've ensured there's enough space, we can shift the data around. @@ -287,6 +287,7 @@ impl VarZeroVecOwned { // Note: There are no references introduced between pointer creation and pointer use, and all // raw pointers are derived from a single &mut. This preserves pointer provenance. let slice_range = self.entire_slice.as_mut_ptr_range(); + let old_slice_end = slice_range.start.add(slice_len); let data_start = slice_range .start .add(LENGTH_WIDTH + METADATA_WIDTH + len * F::INDEX_WIDTH); @@ -316,7 +317,7 @@ impl VarZeroVecOwned { // Shift data after the element to its new position. shift_bytes( - prev_element_p.end..slice_range.end, + prev_element_p.end..old_slice_end, prev_element_p .start .offset((new_size as i64 + index_shift) as isize),