mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Merge branch 'PHP-7.0' into PHP-7.1
* PHP-7.0: Fix open_basedir check for glob:// opendir wrapper
This commit is contained in:
commit
005ba2001d
2 changed files with 39 additions and 4 deletions
35
ext/standard/tests/streams/glob-wrapper.phpt
Normal file
35
ext/standard/tests/streams/glob-wrapper.phpt
Normal file
|
@ -0,0 +1,35 @@
|
|||
--TEST--
|
||||
Glob wrapper bypasses open_basedir
|
||||
--INI--
|
||||
open_basedir=/does_not_exist
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!in_array("glob", stream_get_wrappers())) echo "skip";
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
foreach ( [ __DIR__, "glob://".__DIR__ ] as $spec) {
|
||||
echo "** Opening $spec\n";
|
||||
$dir = opendir($spec);
|
||||
if (!$dir) {
|
||||
echo "Failed to open $spec\n";
|
||||
continue;
|
||||
}
|
||||
if (false === readdir($dir)) {
|
||||
echo "No files in $spec\n";
|
||||
continue;
|
||||
}
|
||||
}
|
||||
--EXPECTF--
|
||||
** Opening %s
|
||||
|
||||
Warning: opendir(): open_basedir restriction in effect. File(/%s) is not within the allowed path(s): (/does_not_exist) in %s/glob-wrapper.php on line 5
|
||||
|
||||
Warning: opendir(/%s): failed to open dir: Operation not permitted in %s/glob-wrapper.php on line 5
|
||||
Failed to open /%s
|
||||
** Opening glob://%s
|
||||
|
||||
Warning: opendir(): open_basedir restriction in effect. File(/%s) is not within the allowed path(s): (/does_not_exist) in %s/glob-wrapper.php on line 5
|
||||
|
||||
Warning: opendir(glob://%s): failed to open dir: operation failed in %s/glob-wrapper.php on line 5
|
||||
Failed to open glob://%s
|
|
@ -213,10 +213,6 @@ static php_stream *php_glob_stream_opener(php_stream_wrapper *wrapper, const cha
|
|||
int ret;
|
||||
const char *tmp, *pos;
|
||||
|
||||
if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) && php_check_open_basedir(path)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!strncmp(path, "glob://", sizeof("glob://")-1)) {
|
||||
path += sizeof("glob://")-1;
|
||||
if (opened_path) {
|
||||
|
@ -224,6 +220,10 @@ static php_stream *php_glob_stream_opener(php_stream_wrapper *wrapper, const cha
|
|||
}
|
||||
}
|
||||
|
||||
if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) && php_check_open_basedir(path)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pglob = ecalloc(sizeof(*pglob), 1);
|
||||
|
||||
if (0 != (ret = glob(path, pglob->flags & GLOB_FLAGMASK, NULL, &pglob->glob))) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue