From 5385f897f2cead255f8896e289f9bb350eb1aaca Mon Sep 17 00:00:00 2001 From: Robert Kruszewski Date: Mon, 18 May 2026 12:49:41 +0100 Subject: [PATCH 1/7] BufferMut::zeroed_aligned stores actually allocated length instead of passed length Signed-off-by: Robert Kruszewski --- vortex-buffer/src/buffer.rs | 25 +++++++++++++++++++++ vortex-buffer/src/buffer_mut.rs | 39 ++++++++++++++++++++++++++++++--- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/vortex-buffer/src/buffer.rs b/vortex-buffer/src/buffer.rs index 053cb5baee5..41557e36ff6 100644 --- a/vortex-buffer/src/buffer.rs +++ b/vortex-buffer/src/buffer.rs @@ -780,6 +780,31 @@ mod test { assert_eq!(buf.chunk(), b"world"); } + #[test] + fn byte_buffer_zeroed() { + const LEN: usize = 17; + + let buf = ByteBuffer::zeroed(LEN); + + assert_eq!(buf.len(), LEN); + assert_eq!(buf.alignment(), Alignment::of::()); + assert!(buf.is_aligned(Alignment::of::())); + assert_eq!(buf.as_slice(), &[0; LEN]); + } + + #[test] + fn byte_buffer_zeroed_aligned() { + const LEN: usize = 17; + let alignment = Alignment::new(64); + + let buf = ByteBuffer::zeroed_aligned(LEN, alignment); + + assert_eq!(buf.len(), LEN); + assert_eq!(buf.alignment(), alignment); + assert!(buf.is_aligned(alignment)); + assert_eq!(buf.as_slice(), &[0; LEN]); + } + #[test] fn from_vec() { let vec = vec![1, 2, 3, 4, 5]; diff --git a/vortex-buffer/src/buffer_mut.rs b/vortex-buffer/src/buffer_mut.rs index 51e6ca2cbb4..87d0765995f 100644 --- a/vortex-buffer/src/buffer_mut.rs +++ b/vortex-buffer/src/buffer_mut.rs @@ -65,12 +65,14 @@ impl BufferMut { /// Create a new zeroed `BufferMut`. pub fn zeroed_aligned(len: usize, alignment: Alignment) -> Self { - let mut bytes = BytesMut::zeroed((len * size_of::()) + *alignment); + let size_t = size_of::(); + let mut bytes = BytesMut::zeroed((len * size_t) + *alignment); bytes.advance(bytes.as_ptr().align_offset(*alignment)); - unsafe { bytes.set_len(len * size_of::()) }; + unsafe { bytes.set_len(len * size_t) }; + let actual_len = if size_t == 0 { 0 } else { bytes.len() / size_t }; Self { bytes, - length: len, + length: actual_len, alignment, _marker: Default::default(), } @@ -875,4 +877,35 @@ mod test { BufMut::put_slice(&mut buf, b"world"); assert_eq!(buf.as_slice(), b"helloworld"); } + + #[test] + fn byte_buffer_mut_zeroed() { + const LEN: usize = 17; + + let mut buf = ByteBufferMut::zeroed(LEN); + + assert_eq!(buf.len(), LEN); + assert_eq!(buf.alignment(), Alignment::of::()); + assert_eq!(buf.as_ptr().align_offset(*Alignment::of::()), 0); + assert_eq!(buf.as_slice(), &[0; LEN]); + + buf[3] = 7; + assert_eq!(buf.as_slice()[3], 7); + } + + #[test] + fn byte_buffer_mut_zeroed_aligned() { + const LEN: usize = 17; + let alignment = Alignment::new(64); + + let mut buf = ByteBufferMut::zeroed_aligned(LEN, alignment); + + assert_eq!(buf.len(), LEN); + assert_eq!(buf.alignment(), alignment); + assert_eq!(buf.as_ptr().align_offset(*alignment), 0); + assert_eq!(buf.as_slice(), &[0; LEN]); + + buf[3] = 7; + assert_eq!(buf.as_slice()[3], 7); + } } From 9673cb4494b55c0ad17da98ba6c4043e63eac2d6 Mon Sep 17 00:00:00 2001 From: Robert Kruszewski Date: Mon, 18 May 2026 12:57:40 +0100 Subject: [PATCH 2/7] better Signed-off-by: Robert Kruszewski --- vortex-buffer/src/buffer.rs | 12 ++++++------ vortex-buffer/src/buffer_mut.rs | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/vortex-buffer/src/buffer.rs b/vortex-buffer/src/buffer.rs index 41557e36ff6..1df1b028592 100644 --- a/vortex-buffer/src/buffer.rs +++ b/vortex-buffer/src/buffer.rs @@ -781,23 +781,23 @@ mod test { } #[test] - fn byte_buffer_zeroed() { + fn buffer_zeroed() { const LEN: usize = 17; - let buf = ByteBuffer::zeroed(LEN); + let buf = Buffer::::zeroed(LEN); assert_eq!(buf.len(), LEN); - assert_eq!(buf.alignment(), Alignment::of::()); - assert!(buf.is_aligned(Alignment::of::())); + assert_eq!(buf.alignment(), Alignment::of::()); + assert!(buf.is_aligned(Alignment::of::())); assert_eq!(buf.as_slice(), &[0; LEN]); } #[test] - fn byte_buffer_zeroed_aligned() { + fn buffer_zeroed_aligned() { const LEN: usize = 17; let alignment = Alignment::new(64); - let buf = ByteBuffer::zeroed_aligned(LEN, alignment); + let buf = Buffer::::zeroed_aligned(LEN, alignment); assert_eq!(buf.len(), LEN); assert_eq!(buf.alignment(), alignment); diff --git a/vortex-buffer/src/buffer_mut.rs b/vortex-buffer/src/buffer_mut.rs index 87d0765995f..8af1a58d774 100644 --- a/vortex-buffer/src/buffer_mut.rs +++ b/vortex-buffer/src/buffer_mut.rs @@ -879,14 +879,14 @@ mod test { } #[test] - fn byte_buffer_mut_zeroed() { + fn buffer_mut_zeroed() { const LEN: usize = 17; - let mut buf = ByteBufferMut::zeroed(LEN); + let mut buf = BufferMut::::zeroed(LEN); assert_eq!(buf.len(), LEN); - assert_eq!(buf.alignment(), Alignment::of::()); - assert_eq!(buf.as_ptr().align_offset(*Alignment::of::()), 0); + assert_eq!(buf.alignment(), Alignment::of::()); + assert_eq!(buf.as_ptr().align_offset(*Alignment::of::()), 0); assert_eq!(buf.as_slice(), &[0; LEN]); buf[3] = 7; @@ -894,11 +894,11 @@ mod test { } #[test] - fn byte_buffer_mut_zeroed_aligned() { + fn buffer_mut_zeroed_aligned() { const LEN: usize = 17; let alignment = Alignment::new(64); - let mut buf = ByteBufferMut::zeroed_aligned(LEN, alignment); + let mut buf = BufferMut::::zeroed_aligned(LEN, alignment); assert_eq!(buf.len(), LEN); assert_eq!(buf.alignment(), alignment); From 64d1bf2eb9956b6218ebdd69fd31fd64ea54e110 Mon Sep 17 00:00:00 2001 From: Robert Kruszewski Date: Mon, 18 May 2026 13:00:08 +0100 Subject: [PATCH 3/7] less Signed-off-by: Robert Kruszewski --- vortex-buffer/src/buffer.rs | 6 +----- vortex-buffer/src/buffer_mut.rs | 4 ---- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/vortex-buffer/src/buffer.rs b/vortex-buffer/src/buffer.rs index 1df1b028592..438c2352995 100644 --- a/vortex-buffer/src/buffer.rs +++ b/vortex-buffer/src/buffer.rs @@ -774,7 +774,7 @@ mod test { assert_eq!(buf.remaining(), 10); assert_eq!(buf.chunk(), b"helloworld"); - Buf::advance(&mut buf, 5); + buf.advance(5); assert_eq!(buf.remaining(), 5); assert_eq!(buf.as_slice(), b"world"); assert_eq!(buf.chunk(), b"world"); @@ -786,8 +786,6 @@ mod test { let buf = Buffer::::zeroed(LEN); - assert_eq!(buf.len(), LEN); - assert_eq!(buf.alignment(), Alignment::of::()); assert!(buf.is_aligned(Alignment::of::())); assert_eq!(buf.as_slice(), &[0; LEN]); } @@ -799,8 +797,6 @@ mod test { let buf = Buffer::::zeroed_aligned(LEN, alignment); - assert_eq!(buf.len(), LEN); - assert_eq!(buf.alignment(), alignment); assert!(buf.is_aligned(alignment)); assert_eq!(buf.as_slice(), &[0; LEN]); } diff --git a/vortex-buffer/src/buffer_mut.rs b/vortex-buffer/src/buffer_mut.rs index 8af1a58d774..b8fd8c24e8e 100644 --- a/vortex-buffer/src/buffer_mut.rs +++ b/vortex-buffer/src/buffer_mut.rs @@ -884,8 +884,6 @@ mod test { let mut buf = BufferMut::::zeroed(LEN); - assert_eq!(buf.len(), LEN); - assert_eq!(buf.alignment(), Alignment::of::()); assert_eq!(buf.as_ptr().align_offset(*Alignment::of::()), 0); assert_eq!(buf.as_slice(), &[0; LEN]); @@ -900,8 +898,6 @@ mod test { let mut buf = BufferMut::::zeroed_aligned(LEN, alignment); - assert_eq!(buf.len(), LEN); - assert_eq!(buf.alignment(), alignment); assert_eq!(buf.as_ptr().align_offset(*alignment), 0); assert_eq!(buf.as_slice(), &[0; LEN]); From efc475a7cdd40a436b68bb26a8dbe7fa4f1484cf Mon Sep 17 00:00:00 2001 From: Robert Kruszewski Date: Mon, 18 May 2026 13:00:52 +0100 Subject: [PATCH 4/7] less Signed-off-by: Robert Kruszewski --- vortex-buffer/src/buffer_mut.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vortex-buffer/src/buffer_mut.rs b/vortex-buffer/src/buffer_mut.rs index b8fd8c24e8e..f886854462d 100644 --- a/vortex-buffer/src/buffer_mut.rs +++ b/vortex-buffer/src/buffer_mut.rs @@ -863,7 +863,7 @@ mod test { assert_eq!(buf.remaining(), 10); assert_eq!(buf.chunk(), b"helloworld"); - Buf::advance(&mut buf, 5); + buf.advance(5); assert_eq!(buf.remaining(), 5); assert_eq!(buf.as_slice(), b"world"); assert_eq!(buf.chunk(), b"world"); @@ -874,7 +874,7 @@ mod test { let mut buf = ByteBufferMut::copy_from("hello".as_bytes()); assert_eq!(BufMut::remaining_mut(&buf), usize::MAX - 5); - BufMut::put_slice(&mut buf, b"world"); + buf.put_slice(b"world"); assert_eq!(buf.as_slice(), b"helloworld"); } From 431b93d6bab51f84fbcf4ae39adfb2bef6ad57aa Mon Sep 17 00:00:00 2001 From: Robert Kruszewski Date: Mon, 18 May 2026 13:04:28 +0100 Subject: [PATCH 5/7] inline Signed-off-by: Robert Kruszewski --- vortex-buffer/src/buffer_mut.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/vortex-buffer/src/buffer_mut.rs b/vortex-buffer/src/buffer_mut.rs index f886854462d..c830f62602c 100644 --- a/vortex-buffer/src/buffer_mut.rs +++ b/vortex-buffer/src/buffer_mut.rs @@ -65,11 +65,10 @@ impl BufferMut { /// Create a new zeroed `BufferMut`. pub fn zeroed_aligned(len: usize, alignment: Alignment) -> Self { - let size_t = size_of::(); - let mut bytes = BytesMut::zeroed((len * size_t) + *alignment); + let mut bytes = BytesMut::zeroed((len * size_of::()) + *alignment); bytes.advance(bytes.as_ptr().align_offset(*alignment)); - unsafe { bytes.set_len(len * size_t) }; - let actual_len = if size_t == 0 { 0 } else { bytes.len() / size_t }; + unsafe { bytes.set_len(len * size_of::()) }; + let actual_len = if size_of::() == 0 { 0 } else { bytes.len() / size_of::() }; Self { bytes, length: actual_len, From 11680d8a401083db64604fdabd10940defef0720 Mon Sep 17 00:00:00 2001 From: Robert Kruszewski Date: Mon, 18 May 2026 13:20:52 +0100 Subject: [PATCH 6/7] format Signed-off-by: Robert Kruszewski --- vortex-buffer/src/buffer_mut.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vortex-buffer/src/buffer_mut.rs b/vortex-buffer/src/buffer_mut.rs index c830f62602c..22b5b388acd 100644 --- a/vortex-buffer/src/buffer_mut.rs +++ b/vortex-buffer/src/buffer_mut.rs @@ -68,7 +68,11 @@ impl BufferMut { let mut bytes = BytesMut::zeroed((len * size_of::()) + *alignment); bytes.advance(bytes.as_ptr().align_offset(*alignment)); unsafe { bytes.set_len(len * size_of::()) }; - let actual_len = if size_of::() == 0 { 0 } else { bytes.len() / size_of::() }; + let actual_len = if size_of::() == 0 { + 0 + } else { + bytes.len() / size_of::() + }; Self { bytes, length: actual_len, From fa513af6de0d997c1e87239690c3084cf0a27172 Mon Sep 17 00:00:00 2001 From: Robert Kruszewski Date: Mon, 18 May 2026 14:18:04 +0100 Subject: [PATCH 7/7] fewer Signed-off-by: Robert Kruszewski --- vortex-buffer/src/buffer_mut.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/vortex-buffer/src/buffer_mut.rs b/vortex-buffer/src/buffer_mut.rs index 22b5b388acd..44ecd4252ce 100644 --- a/vortex-buffer/src/buffer_mut.rs +++ b/vortex-buffer/src/buffer_mut.rs @@ -68,11 +68,7 @@ impl BufferMut { let mut bytes = BytesMut::zeroed((len * size_of::()) + *alignment); bytes.advance(bytes.as_ptr().align_offset(*alignment)); unsafe { bytes.set_len(len * size_of::()) }; - let actual_len = if size_of::() == 0 { - 0 - } else { - bytes.len() / size_of::() - }; + let actual_len = bytes.len().checked_div(size_of::()).unwrap_or(0); Self { bytes, length: actual_len,