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:
Sara Golemon 2017-01-09 16:08:08 -08:00
commit 005ba2001d
2 changed files with 39 additions and 4 deletions

View 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

View file

@ -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))) {