Skip to content

Commit

Permalink
round(): Validate the rounding mode (#12252)
Browse files Browse the repository at this point in the history
  • Loading branch information
TimWolla committed Sep 22, 2023
1 parent f6fae19 commit 3d857d5
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 0 deletions.
1 change: 1 addition & 0 deletions NEWS
Expand Up @@ -15,5 +15,6 @@ Standard:
. Implement GH-12188 (Indication for the int size in phpinfo()). (timwolla)
. Partly fix GH-12143 (Incorrect round() result for 0.49999999999999994).
(timwolla)
. Fix GH-12252 (round(): Validate the rounding mode). (timwolla)

<<< NOTE: Insert NEWS from last stable release here prior to actual release! >>>
3 changes: 3 additions & 0 deletions UPGRADING
Expand Up @@ -58,6 +58,9 @@ PHP 8.4 UPGRADE NOTES
would have resulted in 1.0 instead of the correct result 0.0. Additional
inputs might also be affected and result in different outputs compared to
earlier PHP versions.
. round() now validates the value of the $mode parameter and throws a ValueError
for invalid modes. Previously invalid modes would have been interpreted as
PHP_ROUND_HALF_UP.

========================================
6. New Functions
Expand Down
11 changes: 11 additions & 0 deletions ext/standard/math.c
Expand Up @@ -335,6 +335,17 @@ PHP_FUNCTION(round)
}
}

switch (mode) {
case PHP_ROUND_HALF_UP:
case PHP_ROUND_HALF_DOWN:
case PHP_ROUND_HALF_EVEN:
case PHP_ROUND_HALF_ODD:
break;
default:
zend_argument_value_error(3, "must be a valid rounding mode (PHP_ROUND_*)");
RETURN_THROWS();
}

switch (Z_TYPE_P(value)) {
case IS_LONG:
/* Simple case - long that doesn't need to be rounded. */
Expand Down
12 changes: 12 additions & 0 deletions ext/standard/tests/math/round_valid_rounding_mode.phpt
@@ -0,0 +1,12 @@
--TEST--
round() rejects invalid rounding modes.
--FILE--
<?php
try {
var_dump(round(1.5, mode: 1234));
} catch (ValueError $e) {
echo $e->getMessage(), PHP_EOL;
}
?>
--EXPECT--
round(): Argument #3 ($mode) must be a valid rounding mode (PHP_ROUND_*)

0 comments on commit 3d857d5

Please sign in to comment.