From 9f042405061ffdd3b49adcffd233e4bf2407f1ed Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Thu, 29 Feb 2024 14:12:30 +0100 Subject: [PATCH] Avoid panic branch in `EscapeDefault::backslash` and `EscapeDebug::backslash`. --- library/core/src/escape.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/library/core/src/escape.rs b/library/core/src/escape.rs index 143e277283e2c..45dc79ad36c3d 100644 --- a/library/core/src/escape.rs +++ b/library/core/src/escape.rs @@ -3,6 +3,7 @@ use crate::ascii; use crate::num::NonZero; use crate::ops::Range; +use crate::ptr; const HEX_DIGITS: [ascii::Char; 16] = *b"0123456789abcdef".as_ascii().unwrap(); @@ -82,7 +83,12 @@ impl EscapeIterInner { const { assert!(M <= N) }; let mut data = [ascii::Char::Null; N]; - data[..M].copy_from_slice(&array); + + // SAFETY: `M` is smaller than or equal to `N`, and `data` does not overlap `array`. + unsafe { + ptr::copy_nonoverlapping(array.as_ptr(), data.as_mut_ptr(), M); + } + Self::new(data, 0..M as u8) }