From af6439bf1d08a150a517ee9566485f06839919c6 Mon Sep 17 00:00:00 2001 From: Evan Relf Date: Sat, 8 Mar 2025 21:13:52 -0800 Subject: [PATCH 1/2] Don't generate invalid non-zero integers For example, the instance for `NonZeroUsize` was generating code equivalent to this: ```rust NonZeroUsize::new(u.arbitrary::()?)? ``` But `u.arbitrary::()` can generate 0, which will fail. --- src/foreign/core/num.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/foreign/core/num.rs b/src/foreign/core/num.rs index f0d5b33..396e9f1 100644 --- a/src/foreign/core/num.rs +++ b/src/foreign/core/num.rs @@ -94,7 +94,7 @@ macro_rules! implement_nonzero_int { ($nonzero:ty, $int:ty) => { impl<'a> Arbitrary<'a> for $nonzero { fn arbitrary(u: &mut Unstructured<'a>) -> Result { - match Self::new(<$int as Arbitrary<'a>>::arbitrary(u)?) { + match Self::new(<$int as Arbitrary<'a>>::arbitrary(u)?.saturating_add(1)) { Some(n) => Ok(n), None => Err(Error::IncorrectFormat), } From 213069e3190f1201d5510873e5e1ea9893910b8d Mon Sep 17 00:00:00 2001 From: Evan Relf Date: Tue, 11 Mar 2025 17:58:08 -0700 Subject: [PATCH 2/2] Replace add with default to max --- src/foreign/core/num.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/foreign/core/num.rs b/src/foreign/core/num.rs index 396e9f1..6b0946c 100644 --- a/src/foreign/core/num.rs +++ b/src/foreign/core/num.rs @@ -1,5 +1,5 @@ use { - crate::{Arbitrary, Error, MaxRecursionReached, Result, Unstructured}, + crate::{Arbitrary, MaxRecursionReached, Result, Unstructured}, core::{ mem, num::{ @@ -94,9 +94,9 @@ macro_rules! implement_nonzero_int { ($nonzero:ty, $int:ty) => { impl<'a> Arbitrary<'a> for $nonzero { fn arbitrary(u: &mut Unstructured<'a>) -> Result { - match Self::new(<$int as Arbitrary<'a>>::arbitrary(u)?.saturating_add(1)) { + match Self::new(<$int as Arbitrary<'a>>::arbitrary(u)?) { Some(n) => Ok(n), - None => Err(Error::IncorrectFormat), + None => Ok(Self::new(<$int>::MAX).unwrap()), } }