summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2014-08-14 16:59:14 -0700
committerStanislav Malyshev <stas@php.net>2014-08-14 17:00:36 -0700
commit418563320788cb70c9319c3625669fea53afa295 (patch)
treecdc655f95cc6254ef4f598229ccd74ab4290812d /ext
parentd1dd71454d4ff9b6207c3ab73893f54da62cc3cf (diff)
parentad492ca9327fc9f7f0ea7a0ddd32e62cdf0c9137 (diff)
downloadphp-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.c11
-rw-r--r--ext/standard/tests/file/glob_variation3.phpt53
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==