diff options
| author | Rubens Brandao <git@rubens.io> | 2024-05-10 16:08:12 -0300 |
|---|---|---|
| committer | Kyle Martin <krm504@nyu.edu> | 2024-05-15 13:33:50 -0400 |
| commit | dfd0109db25a3d2a63277ac3bbc848474d71ae53 (patch) | |
| tree | e158f3305ea80de1be9db43794e9f29d454a1f52 | |
| parent | 64313de8d9591193ce92173f9377c400c8a0722d (diff) | |
Fix invalid write to uninitialized reserved Vec
| -rw-r--r-- | rust/src/binaryview.rs | 25 |
1 files changed, 5 insertions, 20 deletions
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<u8>, 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) { |
