Skip to content

Commit

Permalink
Merge branch 'PHP-8.3' into PHP-8.4
Browse files Browse the repository at this point in the history
  • Loading branch information
devnexen committed Oct 20, 2024
2 parents 909cecb + d6bac2f commit bde23d0
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 6 deletions.
2 changes: 2 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ PHP NEWS
. Fixed floating point exception bug with gmp_pow when using
large exposant values. (David Carlier).
. Fixed bug GH-16411 (gmp_export() can cause overflow). (cmb)
. Fixed bug GH-16501 (gmp_random_bits() can cause overflow).
(David Carlier)

- MBstring:
. Fixed bug GH-16361 (mb_substr overflow on start/length arguments).
Expand Down
12 changes: 9 additions & 3 deletions ext/gmp/gmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1821,15 +1821,21 @@ ZEND_FUNCTION(gmp_random_bits)
RETURN_THROWS();
}

if (bits <= 0) {
zend_argument_value_error(1, "must be greater than or equal to 1");
#if SIZEOF_SIZE_T == 4
const zend_long maxbits = ULONG_MAX / GMP_NUMB_BITS;
#else
const zend_long maxbits = INT_MAX;
#endif

if (bits <= 0 || bits > maxbits) {
zend_argument_value_error(1, "must be between 1 and " ZEND_LONG_FMT, maxbits);
RETURN_THROWS();
}

INIT_GMP_RETVAL(gmpnum_result);
gmp_init_random();

mpz_urandomb(gmpnum_result, GMPG(rand_state), bits);
mpz_urandomb(gmpnum_result, GMPG(rand_state), (mp_bitcnt_t)bits);
}
/* }}} */

Expand Down
14 changes: 14 additions & 0 deletions ext/gmp/tests/gh16501.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
--TEST--
GH-16501 (gmp_random_bits overflow)
--EXTENSIONS--
gmp
--FILE--
<?php
try {
gmp_random_bits(PHP_INT_MAX);
} catch (\ValueError $e) {
echo $e->getMessage();
}
?>
--EXPECTF--
gmp_random_bits(): Argument #1 ($bits) must be between 1 and %d
6 changes: 3 additions & 3 deletions ext/gmp/tests/gmp_random_bits.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ while (1) {

echo "Done\n";
?>
--EXPECT--
gmp_random_bits(): Argument #1 ($bits) must be greater than or equal to 1
gmp_random_bits(): Argument #1 ($bits) must be greater than or equal to 1
--EXPECTF--
gmp_random_bits(): Argument #1 ($bits) must be between 1 and %d
gmp_random_bits(): Argument #1 ($bits) must be between 1 and %d
Done

0 comments on commit bde23d0

Please sign in to comment.