Skip to content

Commit b4ceb2c

Browse files
committed
ext/standard: Validate scandir() sorting_order parameter
1 parent 6341dd6 commit b4ceb2c

3 files changed

Lines changed: 16 additions & 35 deletions

File tree

ext/standard/dir.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -537,10 +537,8 @@ PHP_FUNCTION(scandir)
537537
Z_PARAM_RESOURCE_OR_NULL(zcontext)
538538
ZEND_PARSE_PARAMETERS_END();
539539

540-
if (flags != PHP_SCANDIR_SORT_ASCENDING &&
541-
flags != PHP_SCANDIR_SORT_DESCENDING &&
542-
flags != PHP_SCANDIR_SORT_NONE) {
543-
zend_argument_value_error(2, "must be one of SCANDIR_SORT_ASCENDING, SCANDIR_SORT_DESCENDING, or SCANDIR_SORT_NONE");
540+
if (flags != PHP_SCANDIR_SORT_ASCENDING && flags != PHP_SCANDIR_SORT_NONE) {
541+
zend_argument_value_error(2, "must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE");
544542
RETURN_THROWS();
545543
}
546544

ext/standard/tests/dir/scandir_invalid_flag.phpt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ echo "== Valid flags ==\n";
77

88
$valid_flags = [
99
SCANDIR_SORT_ASCENDING,
10-
SCANDIR_SORT_DESCENDING,
1110
SCANDIR_SORT_NONE,
1211
];
1312

@@ -23,9 +22,8 @@ $invalid_flags = [-1, 3, 999, PHP_INT_MAX];
2322
foreach ($invalid_flags as $flag) {
2423
try {
2524
scandir(__DIR__, $flag);
26-
echo "FAIL\n";
2725
} catch (ValueError $e) {
28-
echo "OK\n";
26+
echo $e->getMessage() . PHP_EOL;
2927
}
3028
}
3129

@@ -34,9 +32,8 @@ foreach ($invalid_flags as $flag) {
3432
== Valid flags ==
3533
OK
3634
OK
37-
OK
3835
== Invalid flags ==
39-
OK
40-
OK
41-
OK
42-
OK
36+
scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE
37+
scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE
38+
scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE
39+
scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE

ext/standard/tests/dir/scandir_variation9.phpt

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ mkdir($dir);
2121
$ints = array (PHP_INT_MAX, -PHP_INT_MAX, 0);
2222

2323
foreach($ints as $sorting_order) {
24-
var_dump( scandir($dir, $sorting_order) );
24+
try {
25+
var_dump( scandir($dir, $sorting_order) );
26+
} catch (ValueError $e) {
27+
echo $e->getMessage() . PHP_EOL;
28+
}
2529
}
2630

2731
delete_files($dir, 2);
@@ -31,28 +35,10 @@ delete_files($dir, 2);
3135
$dir = __DIR__ . '/scandir_variation9';
3236
rmdir($dir);
3337
?>
34-
--EXPECT--
38+
--EXPECTF--
3539
*** Testing scandir() : usage variations ***
36-
array(4) {
37-
[0]=>
38-
string(9) "file2.tmp"
39-
[1]=>
40-
string(9) "file1.tmp"
41-
[2]=>
42-
string(2) ".."
43-
[3]=>
44-
string(1) "."
45-
}
46-
array(4) {
47-
[0]=>
48-
string(9) "file2.tmp"
49-
[1]=>
50-
string(9) "file1.tmp"
51-
[2]=>
52-
string(2) ".."
53-
[3]=>
54-
string(1) "."
55-
}
40+
scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE
41+
scandir(): Argument #2 ($sorting_order) must be one of PHP_SCANDIR_SORT_ASCENDING, or SCANDIR_SORT_NONE
5642
array(4) {
5743
[0]=>
5844
string(1) "."
@@ -62,4 +48,4 @@ array(4) {
6248
string(9) "file1.tmp"
6349
[3]=>
6450
string(9) "file2.tmp"
65-
}
51+
}

0 commit comments

Comments
 (0)