summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-10-30 10:36:42 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-10-30 10:36:42 +0100
commitbecda2e0418d4efb55fca40b1170ca67cfbdb4e0 (patch)
treeb54789868ec6fd3c96b41336760767941300582f
parentad9ea5abded29402292b52000f22be122ee32059 (diff)
downloadphp-git-becda2e0418d4efb55fca40b1170ca67cfbdb4e0.tar.gz
Promote mt_rand() min/max warning to ValueError
-rwxr-xr-xext/standard/basic_functions.stub.php3
-rwxr-xr-xext/standard/basic_functions_arginfo.h2
-rw-r--r--ext/standard/mt_rand.c4
-rw-r--r--ext/standard/tests/general_functions/bug46587.phpt10
4 files changed, 10 insertions, 9 deletions
diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php
index 8322a63fc0..8e0a2cde6b 100755
--- a/ext/standard/basic_functions.stub.php
+++ b/ext/standard/basic_functions.stub.php
@@ -953,8 +953,7 @@ function quoted_printable_encode(string $str): string {}
function mt_srand(int $seed = 0, int $mode = MT_RAND_MT19937): void {}
-/** @return int|false */
-function mt_rand(int $min = 0, int $max = PHP_INT_MAX) {}
+function mt_rand(int $min = 0, int $max = PHP_INT_MAX): int {}
function mt_getrandmax(): int {}
diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h
index 6f16c42aea..24735d679f 100755
--- a/ext/standard/basic_functions_arginfo.h
+++ b/ext/standard/basic_functions_arginfo.h
@@ -1241,7 +1241,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mt_srand, 0, 0, IS_VOID, 0)
ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_mt_rand, 0, 0, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mt_rand, 0, 0, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, min, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, max, IS_LONG, 0)
ZEND_END_ARG_INFO()
diff --git a/ext/standard/mt_rand.c b/ext/standard/mt_rand.c
index d38b9cba8d..9dff7da24c 100644
--- a/ext/standard/mt_rand.c
+++ b/ext/standard/mt_rand.c
@@ -325,8 +325,8 @@ PHP_FUNCTION(mt_rand)
ZEND_PARSE_PARAMETERS_END();
if (UNEXPECTED(max < min)) {
- php_error_docref(NULL, E_WARNING, "max(" ZEND_LONG_FMT ") is smaller than min(" ZEND_LONG_FMT ")", max, min);
- RETURN_FALSE;
+ zend_value_error("max (" ZEND_LONG_FMT ") is smaller than min (" ZEND_LONG_FMT ")", max, min);
+ return;
}
RETURN_LONG(php_mt_rand_common(min, max));
diff --git a/ext/standard/tests/general_functions/bug46587.phpt b/ext/standard/tests/general_functions/bug46587.phpt
index becbde9648..ee59feb444 100644
--- a/ext/standard/tests/general_functions/bug46587.phpt
+++ b/ext/standard/tests/general_functions/bug46587.phpt
@@ -4,13 +4,15 @@ Bug #46587 (mt_rand() does not check that max is greater than min).
<?php
var_dump(mt_rand(3,8));
-var_dump(mt_rand(8,3));
+try {
+ var_dump(mt_rand(8,3));
+} catch (ValueError $e) {
+ echo $e->getMessage(), "\n";
+}
echo "Done.\n";
?>
--EXPECTF--
int(%d)
-
-Warning: mt_rand(): max(3) is smaller than min(8) in %s on line %d
-bool(false)
+max (3) is smaller than min (8)
Done.