summaryrefslogtreecommitdiff
path: root/rust/src
diff options
context:
space:
mode:
authorRubens Brandao <git@rubens.io>2024-05-10 16:08:12 -0300
committerKyle Martin <krm504@nyu.edu>2024-05-15 13:33:50 -0400
commitdfd0109db25a3d2a63277ac3bbc848474d71ae53 (patch)
treee158f3305ea80de1be9db43794e9f29d454a1f52 /rust/src
parent64313de8d9591193ce92173f9377c400c8a0722d (diff)
Fix invalid write to uninitialized reserved Vec
Diffstat (limited to 'rust/src')
-rw-r--r--rust/src/binaryview.rs25
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) {