Skip to content

Commit 15a33bc

Browse files
committed
Merge branch 'PHP-8.0'
* PHP-8.0: Make is_file() and friends return false when path contains 0-byte
2 parents 52bd07e + 7bc7a80 commit 15a33bc

11 files changed

+46
-32
lines changed

ext/standard/filestat.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,10 @@ PHPAPI void php_stat(const char *filename, size_t filename_length, int type, zva
728728
const char *local;
729729
php_stream_wrapper *wrapper;
730730

731-
if (!filename_length) {
731+
if (!filename_length || CHECK_NULL_PATH(filename, filename_length)) {
732+
if (filename_length && !IS_EXISTS_CHECK(type)) {
733+
php_error_docref(NULL, E_WARNING, "Filename contains null byte");
734+
}
732735
RETURN_FALSE;
733736
}
734737

@@ -937,7 +940,7 @@ ZEND_NAMED_FUNCTION(name) { \
937940
size_t filename_len; \
938941
\
939942
ZEND_PARSE_PARAMETERS_START(1, 1) \
940-
Z_PARAM_PATH(filename, filename_len) \
943+
Z_PARAM_STRING(filename, filename_len) \
941944
ZEND_PARSE_PARAMETERS_END(); \
942945
\
943946
php_stat(filename, filename_len, funcnum, return_value); \

ext/standard/tests/file/bug39863.phpt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,7 @@ Andrew van der Stock, vanderaj @ owasp.org
66
<?php
77

88
$filename = __FILE__ . chr(0). ".ridiculous";
9-
10-
try {
11-
var_dump(file_exists($filename));
12-
} catch (ValueError $e) {
13-
echo $e->getMessage(), "\n";
14-
}
9+
var_dump(file_exists($filename));
1510
?>
1611
--EXPECT--
17-
file_exists(): Argument #1 ($filename) must not contain any null bytes
12+
bool(false)

ext/standard/tests/file/filegroup_variation3.phpt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,12 @@ bool(false)
7575
Warning: filegroup(): stat failed for %s/filegroup_variation3/filegroup*.tmp in %s on line %d
7676
bool(false)
7777
- Iteration 7 -
78-
filegroup(): Argument #1 ($filename) must not contain any null bytes
78+
79+
Warning: filegroup(): Filename contains null byte in %s on line %d
80+
bool(false)
7981
- Iteration 8 -
80-
filegroup(): Argument #1 ($filename) must not contain any null bytes
82+
83+
Warning: filegroup(): Filename contains null byte in %s on line %d
84+
bool(false)
8185

8286
*** Done ***

ext/standard/tests/file/fileinode_variation3.phpt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,12 @@ bool(false)
7474
Warning: fileinode(): stat failed for %s/fileinode_variation3/fileinode*.tmp in %s on line %d
7575
bool(false)
7676
- Iteration 7 -
77-
fileinode(): Argument #1 ($filename) must not contain any null bytes
77+
78+
Warning: fileinode(): Filename contains null byte in %s on line %d
79+
bool(false)
7880
- Iteration 8 -
79-
fileinode(): Argument #1 ($filename) must not contain any null bytes
81+
82+
Warning: fileinode(): Filename contains null byte in %s on line %d
83+
bool(false)
8084

8185
*** Done ***

ext/standard/tests/file/fileowner_variation3.phpt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,12 @@ bool(false)
7575
Warning: fileowner(): stat failed for %s/fileowner_variation3/fileowner*.tmp in %s on line %d
7676
bool(false)
7777
- Iteration 7 -
78-
fileowner(): Argument #1 ($filename) must not contain any null bytes
78+
79+
Warning: fileowner(): Filename contains null byte in %s on line %d
80+
bool(false)
7981
- Iteration 8 -
80-
fileowner(): Argument #1 ($filename) must not contain any null bytes
82+
83+
Warning: fileowner(): Filename contains null byte in %s on line %d
84+
bool(false)
8185

8286
*** Done ***

ext/standard/tests/file/fileperms_variation3.phpt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,12 @@ bool(false)
7474
Warning: fileperms(): stat failed for %s/fileperms_variation3/fileperms*.tmp in %s on line %d
7575
bool(false)
7676
- Iteration 7 -
77-
fileperms(): Argument #1 ($filename) must not contain any null bytes
77+
78+
Warning: fileperms(): Filename contains null byte in %s on line %d
79+
bool(false)
7880
- Iteration 8 -
79-
fileperms(): Argument #1 ($filename) must not contain any null bytes
81+
82+
Warning: fileperms(): Filename contains null byte in %s on line %d
83+
bool(false)
8084

8185
*** Done ***

ext/standard/tests/file/is_dir_variation4.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ bool(true)
7676
bool(false)
7777

7878
-- Iteration 9 --
79-
is_dir(): Argument #1 ($filename) must not contain any null bytes
79+
bool(false)
8080

8181
-- Iteration 10 --
82-
is_dir(): Argument #1 ($filename) must not contain any null bytes
82+
bool(false)
8383

8484
*** Done ***

ext/standard/tests/file/is_executable_variation1.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ bool(false)
7676
-- Iteration 5 --
7777
bool(false)
7878
-- Iteration 6 --
79-
is_executable(): Argument #1 ($filename) must not contain any null bytes
79+
bool(false)
8080
-- Iteration 7 --
81-
is_executable(): Argument #1 ($filename) must not contain any null bytes
81+
bool(false)
8282
-- Iteration 8 --
8383
bool(false)
8484
-- Iteration 9 --

ext/standard/tests/file/is_file_variation4.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ bool(false)
6666
- Iteration 6 -
6767
bool(false)
6868
- Iteration 7 -
69-
is_file(): Argument #1 ($filename) must not contain any null bytes
69+
bool(false)
7070
- Iteration 8 -
71-
is_file(): Argument #1 ($filename) must not contain any null bytes
71+
bool(false)
7272

7373
*** Done ***

ext/standard/tests/file/is_readable_variation1.phpt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,11 @@ bool(false)
7777
-- Iteration 6 --
7878
bool(false)
7979
-- Iteration 7 --
80-
is_readable(): Argument #1 ($filename) must not contain any null bytes
80+
bool(false)
8181
-- Iteration 8 --
82-
is_readable(): Argument #1 ($filename) must not contain any null bytes
82+
bool(false)
8383
-- Iteration 9 --
84-
is_readable(): Argument #1 ($filename) must not contain any null bytes
84+
bool(false)
8585
-- Iteration 10 --
8686
bool(true)
8787
-- Iteration 11 --

ext/standard/tests/file/is_writable_variation1.phpt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,14 @@ bool(false)
8787
bool(false)
8888
bool(false)
8989
-- Iteration 7 --
90-
is_writable(): Argument #1 ($filename) must not contain any null bytes
91-
is_writeable(): Argument #1 ($filename) must not contain any null bytes
90+
bool(false)
91+
bool(false)
9292
-- Iteration 8 --
93-
is_writable(): Argument #1 ($filename) must not contain any null bytes
94-
is_writeable(): Argument #1 ($filename) must not contain any null bytes
93+
bool(false)
94+
bool(false)
9595
-- Iteration 9 --
96-
is_writable(): Argument #1 ($filename) must not contain any null bytes
97-
is_writeable(): Argument #1 ($filename) must not contain any null bytes
96+
bool(false)
97+
bool(false)
9898
-- Iteration 10 --
9999
bool(true)
100100
bool(true)

0 commit comments

Comments
 (0)