diff --git a/src/base_vec.rs b/src/base_vec.rs index af6232ae..8a3a3b45 100644 --- a/src/base_vec.rs +++ b/src/base_vec.rs @@ -33,7 +33,8 @@ //! bytes required to represent integers up to that max size. use crate::storable::{bounds, bytes_to_store_size_bounded}; use crate::{ - read_u32, read_u64, safe_write, write_u32, write_u64, Address, GrowFailed, Memory, Storable, + read_u32, read_u64, safe_write, write, write_u32, write_u64, Address, GrowFailed, Memory, + Storable, }; use std::borrow::{Borrow, Cow}; use std::cmp::min; @@ -183,7 +184,7 @@ impl BaseVec { let data_offset = self .write_entry_size(offset, bytes.len() as u32) .expect("unreachable: cannot fail to write to pre-allocated area"); - self.memory.write(data_offset, bytes.borrow()); + write(&self.memory, data_offset, bytes.borrow()); } /// Returns the item at the specified index. diff --git a/src/vec/tests.rs b/src/vec/tests.rs index eb89d492..d91e9ed0 100644 --- a/src/vec/tests.rs +++ b/src/vec/tests.rs @@ -266,3 +266,15 @@ fn set_element_bigger_than_max_size_panics() { // Insert a struct where the serialized size is > `MAX_SIZE`. Should panic. sv.set(0, &BuggyStruct(vec![1, 2, 3, 4, 5])); } + +#[test] +fn set_last_element_to_large_blob() { + use crate::storable::Blob; + let sv = StableVec::, M>::new(M::default()).unwrap(); + + // Store a small blob. + sv.push(&Blob::default()).unwrap(); + + // Store a large blob that would require growing the memory. + sv.set(0, &Blob::try_from(vec![1; 65536].as_slice()).unwrap()); +}