summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2013-08-19 14:21:16 +0200
committerStanislav Malyshev <stas@php.net>2014-08-14 16:58:16 -0700
commitad492ca9327fc9f7f0ea7a0ddd32e62cdf0c9137 (patch)
treef59a07b14c70c58287494fded7a7474b5d71e2dd
parent481c4715d4f4c77293d65216324215f671954660 (diff)
downloadphp-git-ad492ca9327fc9f7f0ea7a0ddd32e62cdf0c9137.tar.gz
fixed glob() edge case on windows, ref bug #47358
-rw-r--r--ext/standard/dir.c7
-rw-r--r--ext/standard/tests/file/glob_variation3.phpt50
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==