From c8e7c6261ea5bc581a3e10323677e720bf1dc42b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20K=C3=A5re=20Alsaker?= Date: Fri, 25 Apr 2025 07:14:27 +0200 Subject: [PATCH] Zero the buffer passed from `write_with` --- compiler/rustc_serialize/src/opaque/mem_encoder.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/compiler/rustc_serialize/src/opaque/mem_encoder.rs b/compiler/rustc_serialize/src/opaque/mem_encoder.rs index 5104df042157..56beebb49af7 100644 --- a/compiler/rustc_serialize/src/opaque/mem_encoder.rs +++ b/compiler/rustc_serialize/src/opaque/mem_encoder.rs @@ -35,8 +35,15 @@ impl MemEncoder { self.data.reserve(N); let old_len = self.data.len(); - // SAFETY: fix - let buf = unsafe { &mut *(self.data.as_mut_ptr().add(old_len) as *mut [u8; N]) }; + + // SAFETY: The above `reserve` ensures that there is enough + // room to write the encoded value to the vector's internal buffer. + // The memory is also initialized as 0. + let buf = unsafe { + let buf = self.data.as_mut_ptr().add(old_len) as *mut [u8; N]; + *buf = [0; N]; + &mut *buf + }; let written = visitor(buf); if written > N { Self::panic_invalid_write::(written);