This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch 57_maintenance
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/57_maintenance by this push:
new 25cc1ac28c [57_maintenance] fix: ensure `BufferBuilder::truncate`
doesn't overset length (#9288) (#9311)
25cc1ac28c is described below
commit 25cc1ac28ccdf2fffb844380d2dde1a1966b5ae4
Author: Andrew Lamb <[email protected]>
AuthorDate: Mon Feb 2 10:05:01 2026 -0500
[57_maintenance] fix: ensure `BufferBuilder::truncate` doesn't overset
length (#9288) (#9311)
- Part of https://github.com/apache/arrow-rs/issues/9240
- Related to https://github.com/apache/arrow-rs/issues/9286
This is a backport of the following PR to the 57 line
- https://github.com/apache/arrow-rs/pull/9288 from @Jefffrey
Co-authored-by: Jeffrey Vo <[email protected]>
---
arrow-buffer/src/builder/mod.rs | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/arrow-buffer/src/builder/mod.rs b/arrow-buffer/src/builder/mod.rs
index abe510bdab..d809b0939f 100644
--- a/arrow-buffer/src/builder/mod.rs
+++ b/arrow-buffer/src/builder/mod.rs
@@ -322,7 +322,7 @@ impl<T: ArrowNativeType> BufferBuilder<T> {
#[inline]
pub fn truncate(&mut self, len: usize) {
self.buffer.truncate(len * std::mem::size_of::<T>());
- self.len = len;
+ self.len = self.len.min(len);
}
/// # Safety
@@ -418,4 +418,16 @@ mod tests {
builder.extend([3, 4]);
assert_eq!(builder.len(), 4);
}
+
+ #[test]
+ fn truncate_safety() {
+ let mut builder = BufferBuilder::from(vec![40, -63, 90]);
+ assert_eq!(builder.len(), 3);
+ builder.truncate(151);
+ assert_eq!(builder.len(), 3);
+ builder.advance(219);
+ assert_eq!(builder.len(), 222);
+ let slice = builder.as_slice_mut();
+ assert_eq!(slice.len(), 222);
+ }
}