From 8aa1d3e26a856169e02804e3613bfc898301c948 Mon Sep 17 00:00:00 2001 From: qjerome Date: Mon, 25 May 2026 08:41:59 +0200 Subject: [PATCH 1/2] add: test triggering oob bug --- pure-magic/src/readers/slice.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pure-magic/src/readers/slice.rs b/pure-magic/src/readers/slice.rs index aab2b67..34c8425 100644 --- a/pure-magic/src/readers/slice.rs +++ b/pure-magic/src/readers/slice.rs @@ -572,6 +572,14 @@ mod tests { // === read_while_or_limit === + #[test] + fn test_read_while_or_limit_stream_pos_past_end() { + // stream_pos > buf.len() previously cause an OOB panic via unchecked slice indexing + let mut r = BufReader::from_slice(b"hello"); + r.stream_pos = 10; // past end + assert_eq!(r.read_while_or_limit(|_| true, 100).unwrap(), b""); + } + #[test] fn test_read_while_or_limit_all_match() { let mut r = BufReader::from_slice(b"hello world"); From bf16e2019a2fbec4e521c069183f29bebc2ea929 Mon Sep 17 00:00:00 2001 From: qjerome Date: Mon, 25 May 2026 08:44:41 +0200 Subject: [PATCH 2/2] fix: oob bug in slice reader --- pure-magic/src/readers/slice.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pure-magic/src/readers/slice.rs b/pure-magic/src/readers/slice.rs index 34c8425..24e40f8 100644 --- a/pure-magic/src/readers/slice.rs +++ b/pure-magic/src/readers/slice.rs @@ -172,7 +172,11 @@ where let start = self.stream_pos; let mut end = 0; - for b in &self.buf.as_ref()[start as usize..] { + let Some(buf) = self.buf.as_ref().get(start as usize..) else { + return Ok(&[]); + }; + + for b in buf { if limit - end == 0 { break; }