diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2025-04-25 07:14:27 +0200 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2025-04-25 07:14:27 +0200 |
| commit | c8e7c6261ea5bc581a3e10323677e720bf1dc42b (patch) | |
| tree | 54457332f0a249d2c414cfa11dfbe26d62787030 | |
| parent | 9a6e8b3807e91836f1936df507a231e38cf76d16 (diff) | |
| download | rust-c8e7c6261ea5bc581a3e10323677e720bf1dc42b.tar.gz rust-c8e7c6261ea5bc581a3e10323677e720bf1dc42b.zip | |
Zero the buffer passed from `write_with`
| -rw-r--r-- | compiler/rustc_serialize/src/opaque/mem_encoder.rs | 11 |
1 files 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 5104df04215..56beebb49af 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::<N>(written); |
