From bb1ef4fe21a6dbcaf9b180c0a5163806f8bd6d35 Mon Sep 17 00:00:00 2001 From: David CARLIER Date: Sat, 9 Mar 2024 23:10:12 +0000 Subject: [PATCH] ext/gmp: gmp_invert addressing todo. (#13654) --- ext/gmp/gmp.c | 8 ++++++-- ext/gmp/tests/gmp_invert.phpt | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c index ae9c9b9e5e060..24defb66a7eee 100644 --- a/ext/gmp/gmp.c +++ b/ext/gmp/gmp.c @@ -1585,11 +1585,15 @@ ZEND_FUNCTION(gmp_invert) RETURN_THROWS(); } + if (Z_TYPE_P(b_arg) == IS_LONG && Z_LVAL_P(b_arg) == 0) { + zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Division by zero"); + RETURN_THROWS(); + } + FETCH_GMP_ZVAL(gmpnum_a, a_arg, temp_a, 1); FETCH_GMP_ZVAL_DEP(gmpnum_b, b_arg, temp_b, temp_a, 2); - // TODO Early check if b_arg IS_LONG? - if (0 == mpz_cmp_ui(gmpnum_b, 0)) { + if (!mpz_cmp_ui(gmpnum_b, 0)) { zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Division by zero"); FREE_GMP_TEMP(temp_a); FREE_GMP_TEMP(temp_b); diff --git a/ext/gmp/tests/gmp_invert.phpt b/ext/gmp/tests/gmp_invert.phpt index c295048185b2c..22b22577db0dc 100644 --- a/ext/gmp/tests/gmp_invert.phpt +++ b/ext/gmp/tests/gmp_invert.phpt @@ -15,6 +15,13 @@ try { echo $e->getMessage() . \PHP_EOL; } +try { + $zero = new GMP(0); + var_dump(gmp_invert(5, $zero)); +} catch (\DivisionByZeroError $e) { + echo $e->getMessage() . \PHP_EOL; +} + var_dump(gmp_strval(gmp_invert(0,28347))); var_dump(gmp_strval(gmp_invert(-12,456456))); var_dump(gmp_strval(gmp_invert(234234,-435345))); @@ -48,6 +55,7 @@ string(7) "2293131" string(1) "0" string(4) "5827" Division by zero +Division by zero string(1) "0" string(1) "0" string(1) "0"