From fe44e1637a683de9414e155f034bab993dd8aee3 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Thu, 22 Aug 2019 11:58:57 +0200 Subject: [PATCH] Promote warnings to errors in dirname() --- ext/standard/string.c | 4 ++-- ext/standard/tests/strings/dirname_error.phpt | 10 ++++++---- ext/standard/tests/strings/dirname_multi.phpt | 9 ++++++--- ext/standard/tests/strings/dirname_multi_win.phpt | 13 +++++++++---- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/ext/standard/string.c b/ext/standard/string.c index c98ee49d49..ec43ddf702 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1619,7 +1619,7 @@ PHPAPI size_t php_dirname(char *path, size_t len) } /* }}} */ -/* {{{ proto string|null dirname(string path[, int levels]) +/* {{{ proto string dirname(string path[, int levels]) Returns the directory name component of the path */ PHP_FUNCTION(dirname) { @@ -1644,7 +1644,7 @@ PHP_FUNCTION(dirname) ZSTR_LEN(ret) = zend_dirname(ZSTR_VAL(ret), str_len); #endif } else if (levels < 1) { - php_error_docref(NULL, E_WARNING, "Invalid argument, levels must be >= 1"); + zend_throw_error(NULL, "Invalid argument, levels must be >= 1"); zend_string_efree(ret); return; } else { diff --git a/ext/standard/tests/strings/dirname_error.phpt b/ext/standard/tests/strings/dirname_error.phpt index 79fac30029..daf4e2cb0a 100644 --- a/ext/standard/tests/strings/dirname_error.phpt +++ b/ext/standard/tests/strings/dirname_error.phpt @@ -8,13 +8,15 @@ Test dirname() function : error conditions echo "*** Testing error conditions ***\n"; // Bad arg -var_dump( dirname("/var/tmp/bar.gz", 0) ); +try { + dirname("/var/tmp/bar.gz", 0); +} catch (\Error $e) { + echo $e->getMessage() . "\n"; +} echo "Done\n"; ?> --EXPECTF-- *** Testing error conditions *** - -Warning: dirname(): Invalid argument, levels must be >= 1 in %s on line %d -NULL +Invalid argument, levels must be >= 1 Done diff --git a/ext/standard/tests/strings/dirname_multi.phpt b/ext/standard/tests/strings/dirname_multi.phpt index febbd0c293..f95bf16d2a 100644 --- a/ext/standard/tests/strings/dirname_multi.phpt +++ b/ext/standard/tests/strings/dirname_multi.phpt @@ -11,14 +11,17 @@ if((substr(PHP_OS, 0, 3) == "WIN")) Description: Returns directory name component of path. */ for ($i=0 ; $i<5 ; $i++) { - var_dump(dirname("/foo/bar/baz", $i)); + try { + var_dump(dirname("/foo/bar/baz", $i)); + } catch (\Error $e) { + echo $e->getMessage() . "\n"; + } } var_dump(dirname("/foo/bar/baz", PHP_INT_MAX)); ?> Done --EXPECTF-- -Warning: dirname(): Invalid argument, levels must be >= 1 in %sdirname_multi.php on line %d -NULL +Invalid argument, levels must be >= 1 string(8) "/foo/bar" string(4) "/foo" string(1) "/" diff --git a/ext/standard/tests/strings/dirname_multi_win.phpt b/ext/standard/tests/strings/dirname_multi_win.phpt index 4fed5895e6..9dc0c05c59 100644 --- a/ext/standard/tests/strings/dirname_multi_win.phpt +++ b/ext/standard/tests/strings/dirname_multi_win.phpt @@ -10,17 +10,22 @@ if((substr(PHP_OS, 0, 3) != "WIN")) /* Prototype: string dirname ( string $path [, int nb]); Description: Returns directory name component of path. */ + for ($i=0 ; $i<5 ; $i++) { - var_dump(dirname("/foo/bar/baz", $i)); + try { + var_dump(dirname("/foo/bar/baz", $i)); + } catch (\Error $e) { + echo $e->getMessage() . "\n"; + } } + var_dump(dirname("/foo/bar/baz", PHP_INT_MAX)); var_dump(dirname("g:/foo/bar/baz", PHP_INT_MAX)); var_dump(dirname("g:foo/bar/baz", PHP_INT_MAX)); ?> Done ---EXPECTF-- -Warning: dirname(): Invalid argument, levels must be >= 1 in %sdirname_multi_win.php on line %d -NULL +--EXPECT-- +Invalid argument, levels must be >= 1 string(8) "/foo/bar" string(4) "/foo" string(1) "\" -- 2.40.0