From 7b6e337820e2fc0dfd579b503c79425ef5804190 Mon Sep 17 00:00:00 2001 From: Charlie Tonneslan Date: Sat, 16 May 2026 09:20:53 -0400 Subject: [PATCH] tests: make issue_848 overflow test portable to 32-bit usize The regression test for #848 hardcoded 0x2000000000000000_usize, which is fine on 64-bit but won't fit in a 32-bit usize and fails to compile on i386. Debian ships a downstream patch for this (see #1879). The test just needs a take size large enough to overflow sz.checked_mul(8) inside bits::bytes, i.e. anything bigger than usize::MAX / 8. Switching to usize::MAX / 8 + 1 picks the minimum overflowing value on every platform without a cfg split. Closes #1879 Signed-off-by: Charlie Tonneslan --- tests/issues.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/issues.rs b/tests/issues.rs index 9996b5cc..bc75dfdc 100644 --- a/tests/issues.rs +++ b/tests/issues.rs @@ -142,7 +142,10 @@ mod issue_647 { fn issue_848_overflow_incomplete_bits_to_bytes() { fn take(i: &[u8]) -> IResult<&[u8], &[u8]> { use nom::bytes::streaming::take; - take(0x2000000000000000_usize)(i) + // Needs to trip the `sz.checked_mul(8)` overflow in bits::bytes, i.e. + // larger than usize::MAX / 8. The previous literal (0x2000000000000000) + // assumed 64-bit usize and didn't even compile on 32-bit targets. + take(usize::MAX / 8 + 1)(i) } fn parser(i: &[u8]) -> IResult<&[u8], &[u8]> { use nom::bits::{bits, bytes};