Skip to content

Commit d34c289

Browse files
committed
Fix UserRef<[T]>::copy_to_enclave_vec
It reinterprets uninitialized memory as initialized and does not drop existing elements of the Vec.
1 parent 8c7a94e commit d34c289

File tree

1 file changed

+3
-8
lines changed
  • library/std/src/sys/pal/sgx/abi/usercalls

1 file changed

+3
-8
lines changed

library/std/src/sys/pal/sgx/abi/usercalls/alloc.rs

+3-8
Original file line numberDiff line numberDiff line change
@@ -680,17 +680,12 @@ where
680680

681681
/// Copies the value from user memory and place it into `dest`. Afterwards,
682682
/// `dest` will contain exactly `self.len()` elements.
683-
///
684-
/// # Panics
685-
/// This function panics if the destination doesn't have the same size as
686-
/// the source. This can happen for dynamically-sized types such as slices.
687683
pub fn copy_to_enclave_vec(&self, dest: &mut Vec<T>) {
688-
if let Some(missing) = self.len().checked_sub(dest.capacity()) {
689-
dest.reserve(missing)
690-
}
684+
dest.clear();
685+
dest.reserve(self.len());
686+
self.copy_to_enclave(&mut dest.spare_capacity_mut()[..self.len()]);
691687
// SAFETY: We reserve enough space above.
692688
unsafe { dest.set_len(self.len()) };
693-
self.copy_to_enclave(&mut dest[..]);
694689
}
695690

696691
/// Copies the value from user memory into a vector in enclave memory.

0 commit comments

Comments
 (0)