]> Repositorios git - scryer-prolog.git/commitdiff
Fix `X is gcd(1, 2 ^ 64)` triggering a panic
authorEmilie Burgun <[email protected]>
Mon, 20 Jan 2025 10:10:16 +0000 (11:10 +0100)
committerEmilie Burgun <[email protected]>
Sun, 26 Jan 2025 23:06:06 +0000 (00:06 +0100)
The implementation for gcd/2 would cast the second argument to an isize.

src/machine/arithmetic_ops.rs

index 2d1bdc656f085ce10f12a856dc48c12963d66309..3cd1d9d8c59367b2c00c266c1e2827b010a9d93f 100644 (file)
@@ -947,8 +947,7 @@ pub(crate) fn gcd(n1: Number, n2: Number, arena: &mut Arena) -> Result<Number, M
             Ok(Number::arena_from(Integer::from(n2_clone.gcd(&n1)), arena))
         }
         (Number::Integer(n1), Number::Integer(n2)) => {
-            let n2: isize = (&*n2).try_into().unwrap();
-            let value: Integer = (&*n1).gcd(&Integer::from(n2)).into();
+            let value: Integer = (&*n1).gcd(&*n2).into();
             Ok(Number::arena_from(value, arena))
         }
         (Number::Float(f), _) | (_, Number::Float(f)) => {