From 56065d1e79402f25e1af35bec57a33056b556082 Mon Sep 17 00:00:00 2001 From: Emily Matheys Date: Tue, 24 Feb 2026 16:34:12 +0200 Subject: [PATCH 1/2] fix: Miri error on invalidated mut borrow --- src/stage2.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/stage2.rs b/src/stage2.rs index fefc4785..105d81dc 100644 --- a/src/stage2.rs +++ b/src/stage2.rs @@ -111,6 +111,7 @@ impl<'de> Deserializer<'de> { stack.clear(); stack.reserve(structural_indexes.len()); + let input_ptr = input.as_mut_ptr(); let res_ptr = res.as_mut_ptr(); let stack_ptr = stack.as_mut_ptr(); @@ -185,7 +186,7 @@ impl<'de> Deserializer<'de> { macro_rules! insert_str { () => { insert_res!(Node::String(s2try!(Self::parse_str_( - input.as_mut_ptr(), + input_ptr, &input2, buffer, idx From 3a8286f7983d623cca20b937f78953485083813b Mon Sep 17 00:00:00 2001 From: Emily Matheys Date: Tue, 24 Feb 2026 16:53:09 +0200 Subject: [PATCH 2/2] add comment --- src/stage2.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/stage2.rs b/src/stage2.rs index 105d81dc..9f4d000f 100644 --- a/src/stage2.rs +++ b/src/stage2.rs @@ -111,6 +111,8 @@ impl<'de> Deserializer<'de> { stack.clear(); stack.reserve(structural_indexes.len()); + // Safety: Must NOT advance input pointer as part of logic, since we only get the pointer once. + // Use idx in order to advance through the input. let input_ptr = input.as_mut_ptr(); let res_ptr = res.as_mut_ptr(); let stack_ptr = stack.as_mut_ptr(); @@ -186,10 +188,7 @@ impl<'de> Deserializer<'de> { macro_rules! insert_str { () => { insert_res!(Node::String(s2try!(Self::parse_str_( - input_ptr, - &input2, - buffer, - idx + input_ptr, &input2, buffer, idx )))); }; }