From 4a17971a18981f7dccb6450b22c4af05fbed1cd0 Mon Sep 17 00:00:00 2001 From: Ben Kimock Date: Tue, 26 Sep 2023 20:38:32 -0400 Subject: [PATCH] Clamp instead of asserting in FileEncoder::write_with --- compiler/rustc_serialize/src/opaque.rs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/compiler/rustc_serialize/src/opaque.rs b/compiler/rustc_serialize/src/opaque.rs index 552554390515c..72be6b8c1dded 100644 --- a/compiler/rustc_serialize/src/opaque.rs +++ b/compiler/rustc_serialize/src/opaque.rs @@ -131,16 +131,8 @@ impl FileEncoder { let buf = unsafe { self.buffer_empty().first_chunk_mut::().unwrap_unchecked() }; let written = visitor(buf); // We have to ensure that an errant visitor cannot cause self.buffered to exeed BUF_SIZE. - if written > N { - Self::panic_invalid_write::(written); - } - self.buffered += written; - } - - #[cold] - #[inline(never)] - fn panic_invalid_write(written: usize) { - panic!("FileEncoder::write_with::<{N}> cannot be used to write {written} bytes"); + debug_assert!(written <= N); + self.buffered += written.min(N); } /// Helper for calls where [`FileEncoder::write_with`] always writes the whole array.