From 1ef6f2a771c93ba103ae296acae1272bd1b8b2e2 Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Thu, 31 Jul 2025 09:00:35 -0300 Subject: [PATCH] fix: prevent `SignedField::from(i128::MIN)` from crashing --- compiler/noirc_frontend/src/signed_field.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/compiler/noirc_frontend/src/signed_field.rs b/compiler/noirc_frontend/src/signed_field.rs index 84e4b4328b9..3bae695a8df 100644 --- a/compiler/noirc_frontend/src/signed_field.rs +++ b/compiler/noirc_frontend/src/signed_field.rs @@ -219,7 +219,13 @@ impl From for SignedField { impl From for SignedField { fn from(value: i128) -> Self { - if value < 0 { Self::new((-value).into(), true) } else { Self::new(value.into(), false) } + if value == i128::MIN { + Self::new(FieldElement::from((i128::MAX as u128) + 1), true) + } else if value < 0 { + Self::new((-value).into(), true) + } else { + Self::new(value.into(), false) + } } } @@ -423,4 +429,11 @@ mod tests { i128::MIN ); } + + #[test] + fn from_i128() { + assert_eq!(SignedField::from(i128::MAX).to_i128(), i128::MAX); + assert_eq!(SignedField::from(i128::MIN).to_i128(), i128::MIN); + assert_eq!(SignedField::from(i128::MIN + 1).to_i128(), i128::MIN + 1); + } }