From 3ac1795c25fb186366daee931753c25a3026d1cf Mon Sep 17 00:00:00 2001 From: Pere Diaz Bou Date: Sun, 30 Mar 2025 10:31:39 +0200 Subject: [PATCH] fix from_register serialization --- core/types.rs | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/core/types.rs b/core/types.rs index 1705603cf..9aa32710f 100644 --- a/core/types.rs +++ b/core/types.rs @@ -669,15 +669,31 @@ impl Record { struct AppendWriter<'a> { buf: &'a mut Vec, pos: usize, + buf_capacity_start: usize, + buf_ptr_start: *const u8, +} + +impl Drop for AppendWriter { + fn drop(&mut self) { + // let's make sure we didn't reallocate anywhere else + assert_eq!(self.buf_capacity_start, self.buf.capacity()); + assert_eq!(self.buf_ptr_start, self.buf.as_ptr()); + } } impl<'a> AppendWriter<'a> { pub fn new(buf: &'a mut Vec, pos: usize) -> Self { - Self { buf, pos } + Self { + buf, + pos, + buf_capacity_start: buf.capacity(), + buf_ptr_start: buf.as_ptr(), + } } #[inline] pub fn extend_from_slice(&mut self, slice: &[u8]) { + dbg!(self.pos, slice); self.buf[self.pos..self.pos + slice.len()].copy_from_slice(slice); self.pos += slice.len(); } @@ -728,13 +744,13 @@ impl ImmutableRecord { let value_size = match serial_type { SerialType::Null => 0, - SerialType::I8 => 8, - SerialType::I16 => 16, - SerialType::I24 => 24, - SerialType::I32 => 32, - SerialType::I48 => 48, - SerialType::I64 => 64, - SerialType::F64 => 64, + SerialType::I8 => 1, + SerialType::I16 => 2, + SerialType::I24 => 3, + SerialType::I32 => 4, + SerialType::I48 => 6, + SerialType::I64 => 8, + SerialType::F64 => 8, SerialType::Text { content_size } => content_size, SerialType::Blob { content_size } => content_size, }; @@ -753,15 +769,15 @@ impl ImmutableRecord { // if( nVarint