Commit 0d2d35312b5 for php.net

commit 0d2d35312b5fb7a8863c3442b530d971caa9c71b
Merge: d89f14bde2e 16e217ee550
Author: Saki Takamachi <saki@php.net>
Date:   Sun Jun 7 12:19:57 2026 +0900

    Merge branch 'PHP-8.5'
    * PHP-8.5:
      ext/bcmath: bounds-check $precision in bcround() and Number::round() (#22182)

diff --cc ext/bcmath/bcmath.c
index 2e2d80f76f9,69ee1c68133..0e0a9a23b94
--- a/ext/bcmath/bcmath.c
+++ b/ext/bcmath/bcmath.c
@@@ -792,18 -805,26 +802,22 @@@ PHP_FUNCTION(bcround
  		Z_PARAM_STR(numstr)
  		Z_PARAM_OPTIONAL
  		Z_PARAM_LONG(precision)
 -		Z_PARAM_OBJ_OF_CLASS(mode_object, rounding_mode_ce)
 +		Z_PARAM_ENUM(rounding_mode, rounding_mode_ce)
  	ZEND_PARSE_PARAMETERS_END();

+ 	if (bcmath_check_precision(precision, 2) == FAILURE) {
+ 		RETURN_THROWS();
+ 	}
+
 -	if (mode_object != NULL) {
 -		mode = php_math_round_mode_from_enum(mode_object);
 -	}
 -
 -	switch (mode) {
 -		case PHP_ROUND_HALF_UP:
 -		case PHP_ROUND_HALF_DOWN:
 -		case PHP_ROUND_HALF_EVEN:
 -		case PHP_ROUND_HALF_ODD:
 -		case PHP_ROUND_CEILING:
 -		case PHP_ROUND_FLOOR:
 -		case PHP_ROUND_TOWARD_ZERO:
 -		case PHP_ROUND_AWAY_FROM_ZERO:
 +	switch (rounding_mode) {
 +		case ZEND_ENUM_RoundingMode_HalfAwayFromZero:
 +		case ZEND_ENUM_RoundingMode_HalfTowardsZero:
 +		case ZEND_ENUM_RoundingMode_HalfEven:
 +		case ZEND_ENUM_RoundingMode_HalfOdd:
 +		case ZEND_ENUM_RoundingMode_TowardsZero:
 +		case ZEND_ENUM_RoundingMode_AwayFromZero:
 +		case ZEND_ENUM_RoundingMode_NegativeInfinity:
 +		case ZEND_ENUM_RoundingMode_PositiveInfinity:
  			break;
  		default:
  			/* This is currently unreachable, but might become reachable when new modes are added. */
@@@ -1791,21 -1816,28 +1805,25 @@@ PHP_METHOD(BcMath_Number, round
  	ZEND_PARSE_PARAMETERS_START(0, 2)
  		Z_PARAM_OPTIONAL
  		Z_PARAM_LONG(precision);
 -		Z_PARAM_OBJ_OF_CLASS(mode_object, rounding_mode_ce);
 +		Z_PARAM_ENUM(rounding_mode, rounding_mode_ce);
  	ZEND_PARSE_PARAMETERS_END();

+ 	if (bcmath_check_precision(precision, 1) == FAILURE) {
+ 		RETURN_THROWS();
+ 	}
+
 -	if (mode_object != NULL) {
 -		rounding_mode = php_math_round_mode_from_enum(mode_object);
 -	}
 -
  	switch (rounding_mode) {
 -		case PHP_ROUND_HALF_UP:
 -		case PHP_ROUND_HALF_DOWN:
 -		case PHP_ROUND_HALF_EVEN:
 -		case PHP_ROUND_HALF_ODD:
 -		case PHP_ROUND_CEILING:
 -		case PHP_ROUND_FLOOR:
 -		case PHP_ROUND_TOWARD_ZERO:
 -		case PHP_ROUND_AWAY_FROM_ZERO:
 +		case ZEND_ENUM_RoundingMode_HalfAwayFromZero:
 +		case ZEND_ENUM_RoundingMode_HalfTowardsZero:
 +		case ZEND_ENUM_RoundingMode_HalfEven:
 +		case ZEND_ENUM_RoundingMode_HalfOdd:
 +		case ZEND_ENUM_RoundingMode_TowardsZero:
 +		case ZEND_ENUM_RoundingMode_AwayFromZero:
 +		case ZEND_ENUM_RoundingMode_NegativeInfinity:
 +		case ZEND_ENUM_RoundingMode_PositiveInfinity:
  			break;
  		default:
 +			/* This is currently unreachable, but might become reachable when new modes are added. */
  			zend_argument_value_error(2, "is an unsupported rounding mode");
  			RETURN_THROWS();
  	}