diff --git a/ext/standard/dir.c b/ext/standard/dir.c index 7c1f8efe68875..e8ea1620e4741 100644 --- a/ext/standard/dir.c +++ b/ext/standard/dir.c @@ -537,6 +537,11 @@ PHP_FUNCTION(scandir) Z_PARAM_RESOURCE_OR_NULL(zcontext) ZEND_PARSE_PARAMETERS_END(); + if (flags != PHP_SCANDIR_SORT_ASCENDING && flags != PHP_SCANDIR_SORT_NONE) { + zend_argument_value_error(2, "must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE"); + RETURN_THROWS(); + } + if (dirn_len < 1) { zend_argument_must_not_be_empty_error(1); RETURN_THROWS(); diff --git a/ext/standard/tests/dir/scandir_basic-win32-mb.phpt b/ext/standard/tests/dir/scandir_basic-win32-mb.phpt index 87e6e7e6dac86..c1b8b06b4bbc0 100644 --- a/ext/standard/tests/dir/scandir_basic-win32-mb.phpt +++ b/ext/standard/tests/dir/scandir_basic-win32-mb.phpt @@ -28,7 +28,11 @@ var_dump(scandir($directory)); echo "\n-- scandir() with all arguments --\n"; $sorting_order = SCANDIR_SORT_DESCENDING; $context = stream_context_create(); -var_dump(scandir($directory, $sorting_order, $context)); +try { + var_dump(scandir($directory, $sorting_order, $context)); +} catch (ValueError $e) { + echo $e->getMessage(); +} delete_files($directory, 3, "私はガラスを食べられますfile"); ?> @@ -55,15 +59,4 @@ array(5) { } -- scandir() with all arguments -- -array(5) { - [0]=> - string(45) "私はガラスを食べられますfile3.tmp" - [1]=> - string(45) "私はガラスを食べられますfile2.tmp" - [2]=> - string(45) "私はガラスを食べられますfile1.tmp" - [3]=> - string(2) ".." - [4]=> - string(1) "." -} +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE diff --git a/ext/standard/tests/dir/scandir_basic.phpt b/ext/standard/tests/dir/scandir_basic.phpt index d86aa291421d2..7c3446c0d4bed 100644 --- a/ext/standard/tests/dir/scandir_basic.phpt +++ b/ext/standard/tests/dir/scandir_basic.phpt @@ -22,8 +22,11 @@ var_dump(scandir($directory)); echo "\n-- scandir() with all arguments --\n"; $sorting_order = SCANDIR_SORT_DESCENDING; $context = stream_context_create(); -var_dump(scandir($directory, $sorting_order, $context)); - +try { + var_dump(scandir($directory, $sorting_order, $context)); +} catch (ValueError $e) { + echo $e->getMessage(); +} delete_files($directory, 3); ?> --CLEAN-- @@ -49,15 +52,4 @@ array(5) { } -- scandir() with all arguments -- -array(5) { - [0]=> - string(9) "file3.tmp" - [1]=> - string(9) "file2.tmp" - [2]=> - string(9) "file1.tmp" - [3]=> - string(2) ".." - [4]=> - string(1) "." -} +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE diff --git a/ext/standard/tests/dir/scandir_invalid_flag.phpt b/ext/standard/tests/dir/scandir_invalid_flag.phpt new file mode 100644 index 0000000000000..d53fdaa675e5b --- /dev/null +++ b/ext/standard/tests/dir/scandir_invalid_flag.phpt @@ -0,0 +1,39 @@ +--TEST-- +scandir() flag validation and behavior +--FILE-- +getMessage() . PHP_EOL; + } +} + +?> +--EXPECT-- +== Valid flags == +OK +OK +== Invalid flags == +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE diff --git a/ext/standard/tests/dir/scandir_variation10-win32-mb.phpt b/ext/standard/tests/dir/scandir_variation10-win32-mb.phpt index 69f55bc53b226..4fd46b680c3f1 100644 --- a/ext/standard/tests/dir/scandir_variation10-win32-mb.phpt +++ b/ext/standard/tests/dir/scandir_variation10-win32-mb.phpt @@ -28,8 +28,12 @@ mkdir($dir); @create_files($dir, 2, "numeric", 0755, 1, "w", "私はガラスを食べられますfile"); // Deterministic tests. -var_dump(scandir($dir, SCANDIR_SORT_ASCENDING)); -var_dump(scandir($dir, SCANDIR_SORT_DESCENDING)); +try { + var_dump(scandir($dir, SCANDIR_SORT_ASCENDING)); + var_dump(scandir($dir, SCANDIR_SORT_DESCENDING)); +} catch (ValueError $e) { + echo $e->getMessage(); +} // Non-deterministic tests. $files = scandir($dir, SCANDIR_SORT_NONE); @@ -61,17 +65,7 @@ array(4) { [3]=> string(45) "私はガラスを食べられますfile2.tmp" } -array(4) { - [0]=> - string(45) "私はガラスを食べられますfile2.tmp" - [1]=> - string(45) "私はガラスを食べられますfile1.tmp" - [2]=> - string(2) ".." - [3]=> - string(1) "." -} -int(4) +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONEint(4) bool(true) bool(true) bool(true) diff --git a/ext/standard/tests/dir/scandir_variation10.phpt b/ext/standard/tests/dir/scandir_variation10.phpt index 35df3c3e7565e..37023c2027fe9 100644 --- a/ext/standard/tests/dir/scandir_variation10.phpt +++ b/ext/standard/tests/dir/scandir_variation10.phpt @@ -22,8 +22,12 @@ mkdir($dir); @create_files($dir, 2); // Deterministic tests. -var_dump(scandir($dir, SCANDIR_SORT_ASCENDING)); -var_dump(scandir($dir, SCANDIR_SORT_DESCENDING)); +try { + var_dump(scandir($dir, SCANDIR_SORT_ASCENDING)); + var_dump(scandir($dir, SCANDIR_SORT_DESCENDING)); +} catch (ValueError $e) { + echo $e->getMessage(); +} // Non-deterministic tests. $files = scandir($dir, SCANDIR_SORT_NONE); @@ -55,17 +59,7 @@ array(4) { [3]=> string(9) "file2.tmp" } -array(4) { - [0]=> - string(9) "file2.tmp" - [1]=> - string(9) "file1.tmp" - [2]=> - string(2) ".." - [3]=> - string(1) "." -} -int(4) +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONEint(4) bool(true) bool(true) bool(true) diff --git a/ext/standard/tests/dir/scandir_variation9-win32-mb.phpt b/ext/standard/tests/dir/scandir_variation9-win32-mb.phpt index 44d8b6daa5f9e..bc6a519c59f40 100644 --- a/ext/standard/tests/dir/scandir_variation9-win32-mb.phpt +++ b/ext/standard/tests/dir/scandir_variation9-win32-mb.phpt @@ -27,7 +27,11 @@ mkdir($dir); $ints = array (PHP_INT_MAX, -PHP_INT_MAX, 0); foreach($ints as $sorting_order) { + try { var_dump( scandir($dir, $sorting_order) ); + } catch (ValueError $e) { + echo $e->getMessage() . PHP_EOL; + } } delete_files($dir, 2, "私はガラスを食べられますfile"); @@ -39,26 +43,8 @@ rmdir($dir); ?> --EXPECT-- *** Testing scandir() : usage variations *** -array(4) { - [0]=> - string(45) "私はガラスを食べられますfile2.tmp" - [1]=> - string(45) "私はガラスを食べられますfile1.tmp" - [2]=> - string(2) ".." - [3]=> - string(1) "." -} -array(4) { - [0]=> - string(45) "私はガラスを食べられますfile2.tmp" - [1]=> - string(45) "私はガラスを食べられますfile1.tmp" - [2]=> - string(2) ".." - [3]=> - string(1) "." -} +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE array(4) { [0]=> string(1) "." diff --git a/ext/standard/tests/dir/scandir_variation9.phpt b/ext/standard/tests/dir/scandir_variation9.phpt index 56e5575e55904..1daaa5e2bdca4 100644 --- a/ext/standard/tests/dir/scandir_variation9.phpt +++ b/ext/standard/tests/dir/scandir_variation9.phpt @@ -21,7 +21,11 @@ mkdir($dir); $ints = array (PHP_INT_MAX, -PHP_INT_MAX, 0); foreach($ints as $sorting_order) { - var_dump( scandir($dir, $sorting_order) ); + try { + var_dump( scandir($dir, $sorting_order) ); + } catch (ValueError $e) { + echo $e->getMessage() . PHP_EOL; + } } delete_files($dir, 2); @@ -31,28 +35,10 @@ delete_files($dir, 2); $dir = __DIR__ . '/scandir_variation9'; rmdir($dir); ?> ---EXPECT-- +--EXPECTF-- *** Testing scandir() : usage variations *** -array(4) { - [0]=> - string(9) "file2.tmp" - [1]=> - string(9) "file1.tmp" - [2]=> - string(2) ".." - [3]=> - string(1) "." -} -array(4) { - [0]=> - string(9) "file2.tmp" - [1]=> - string(9) "file1.tmp" - [2]=> - string(2) ".." - [3]=> - string(1) "." -} +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE +scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE array(4) { [0]=> string(1) "."