diff options
author | Anatol Belski <ab@php.net> | 2013-08-19 14:21:16 +0200 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2014-08-14 16:58:16 -0700 |
commit | ad492ca9327fc9f7f0ea7a0ddd32e62cdf0c9137 (patch) | |
tree | f59a07b14c70c58287494fded7a7474b5d71e2dd | |
parent | 481c4715d4f4c77293d65216324215f671954660 (diff) | |
download | php-git-ad492ca9327fc9f7f0ea7a0ddd32e62cdf0c9137.tar.gz |
fixed glob() edge case on windows, ref bug #47358
-rw-r--r-- | ext/standard/dir.c | 7 | ||||
-rw-r--r-- | ext/standard/tests/file/glob_variation3.phpt | 50 |
2 files changed, 57 insertions, 0 deletions
diff --git a/ext/standard/dir.c b/ext/standard/dir.c index f39789a5c9..c64f37c2d6 100644 --- a/ext/standard/dir.c +++ b/ext/standard/dir.c @@ -491,11 +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)) { 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 4f504e668c..9c57ada3be 100644 --- a/ext/standard/tests/file/glob_variation3.phpt +++ b/ext/standard/tests/file/glob_variation3.phpt @@ -6,9 +6,27 @@ $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== @@ -17,4 +35,36 @@ 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) { +} +array(0) { +} ==DONE== |