From dfd0109db25a3d2a63277ac3bbc848474d71ae53 Mon Sep 17 00:00:00 2001 From: Rubens Brandao Date: Fri, 10 May 2024 16:08:12 -0300 Subject: Fix invalid write to uninitialized reserved Vec --- rust/src/binaryview.rs | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) (limited to 'rust/src') diff --git a/rust/src/binaryview.rs b/rust/src/binaryview.rs index d3225758..120a41c9 100644 --- a/rust/src/binaryview.rs +++ b/rust/src/binaryview.rs @@ -237,26 +237,11 @@ pub trait BinaryViewExt: BinaryViewBase { /// Appends up to `len` bytes from address `offset` into `dest` fn read_into_vec(&self, dest: &mut Vec, offset: u64, len: usize) -> usize { let starting_len = dest.len(); - let space = dest.capacity() - starting_len; - - if space < len { - dest.reserve(len - space); - } - - unsafe { - let res; - - { - let dest_slice = dest.get_unchecked_mut(starting_len..starting_len + len); - res = self.read(dest_slice, offset); - } - - if res > 0 { - dest.set_len(starting_len + res); - } - - res - } + dest.resize(starting_len + len, 0); + let slice = &mut dest[starting_len..]; + let read_size = self.read(slice, offset); + dest.truncate(starting_len + read_size); + read_size } fn notify_data_written(&self, offset: u64, len: usize) { -- cgit v1.3.1