diff --git a/bigint/src/biguint.rs b/bigint/src/biguint.rs index fe6303e..00877c8 100644 --- a/bigint/src/biguint.rs +++ b/bigint/src/biguint.rs @@ -242,7 +242,9 @@ impl Num for BigUint { v.push(d); } else { // create ParseIntError::InvalidDigit - let e = u64::from_str_radix(&s[v.len()..], radix).unwrap_err(); + // Include the previous character for context. + let i = cmp::max(v.len(), 1) - 1; + let e = u64::from_str_radix(&s[i..], radix).unwrap_err(); return Err(e.into()); } } diff --git a/bigint/src/tests/biguint.rs b/bigint/src/tests/biguint.rs index 87a223f..01dec42 100644 --- a/bigint/src/tests/biguint.rs +++ b/bigint/src/tests/biguint.rs @@ -1041,6 +1041,8 @@ fn test_from_str_radix() { assert_eq!(plus_plus_one, None); let minus_one = BigUint::from_str_radix("-1", 10).ok(); assert_eq!(minus_one, None); + let zero_plus_two = BigUint::from_str_radix("0+2", 10).ok(); + assert_eq!(zero_plus_two, None); } #[test]