diff options
author | Stanislav Malyshev <stas@php.net> | 2014-08-14 16:59:14 -0700 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2014-08-14 17:00:36 -0700 |
commit | 418563320788cb70c9319c3625669fea53afa295 (patch) | |
tree | cdc655f95cc6254ef4f598229ccd74ab4290812d /ext | |
parent | d1dd71454d4ff9b6207c3ab73893f54da62cc3cf (diff) | |
parent | ad492ca9327fc9f7f0ea7a0ddd32e62cdf0c9137 (diff) | |
download | php-git-418563320788cb70c9319c3625669fea53afa295.tar.gz |
Merge branch 'PHP-5.4' into PHP-5.5
* PHP-5.4:
fixed glob() edge case on windows, ref bug #47358
- fix bug #47358, glob returns error, should be empty array()
Diffstat (limited to 'ext')
-rw-r--r-- | ext/standard/dir.c | 11 | ||||
-rw-r--r-- | ext/standard/tests/file/glob_variation3.phpt | 53 |
2 files changed, 60 insertions, 4 deletions
diff --git a/ext/standard/dir.c b/ext/standard/dir.c index c6d6ddd263..c64f37c2d6 100644 --- a/ext/standard/dir.c +++ b/ext/standard/dir.c @@ -491,13 +491,18 @@ PHP_FUNCTION(glob) /* now catch the FreeBSD style of "no matches" */ if (!globbuf.gl_pathc || !globbuf.gl_pathv) { no_results: +#ifndef PHP_WIN32 + /* Paths containing '*', '?' and some other chars are + illegal on Windows but legit on other platforms. For + this reason the direct basedir check against the glob + query is senseless on windows. For instance while *.txt + is a pretty valid filename on EXT3, it's invalid on NTFS. */ if (PG(open_basedir) && *PG(open_basedir)) { - struct stat s; - - if (0 != VCWD_STAT(pattern, &s) || S_IFDIR != (s.st_mode & S_IFMT)) { + if (php_check_open_basedir_ex(pattern, 0 TSRMLS_CC)) { RETURN_FALSE; } } +#endif array_init(return_value); return; } diff --git a/ext/standard/tests/file/glob_variation3.phpt b/ext/standard/tests/file/glob_variation3.phpt index 9e1e28baf9..9c57ada3be 100644 --- a/ext/standard/tests/file/glob_variation3.phpt +++ b/ext/standard/tests/file/glob_variation3.phpt @@ -6,14 +6,65 @@ $path = dirname(__FILE__); ini_set('open_basedir', NULL); var_dump(glob("$path/*.none")); +var_dump(glob("$path/?.none")); +var_dump(glob("$path/*{hello,world}.none")); +var_dump(glob("$path/*/nothere")); +var_dump(glob("$path/[aoeu]*.none")); +var_dump(glob("$path/directly_not_exists")); ini_set('open_basedir', $path); var_dump(glob("$path/*.none")); +var_dump(glob("$path/?.none")); +var_dump(glob("$path/*{hello,world}.none")); +var_dump(glob("$path/*/nothere")); +var_dump(glob("$path/[aoeu]*.none")); +var_dump(glob("$path/directly_not_exists")); + +ini_set('open_basedir', '/tmp'); +var_dump(glob("$path/*.none")); +var_dump(glob("$path/?.none")); +var_dump(glob("$path/*{hello,world}.none")); +var_dump(glob("$path/*/nothere")); +var_dump(glob("$path/[aoeu]*.none")); +var_dump(glob("$path/directly_not_exists")); ?> ==DONE== --EXPECT-- array(0) { } -bool(false) +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} +array(0) { +} ==DONE== |