summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/tests/file/bug69628.phpt49
-rw-r--r--ext/standard/tests/file/glob_variation.phpt3
-rw-r--r--win32/glob.c6
3 files changed, 56 insertions, 2 deletions
diff --git a/ext/standard/tests/file/bug69628.phpt b/ext/standard/tests/file/bug69628.phpt
new file mode 100644
index 0000000000..7e18619a3e
--- /dev/null
+++ b/ext/standard/tests/file/bug69628.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Bug #69628: GLOB_BRACE with multiple brackets within the braces fails
+--SKIPIF--
+<?php
+if (!defined('GLOB_BRACE')) {
+ die('skip this test requires GLOB_BRACE support');
+}
+?>
+--FILE--
+<?php
+
+$file_path = dirname(__FILE__);
+
+// temp dirname used here
+$dirname = "$file_path/bug69628";
+
+// temp dir created
+mkdir($dirname);
+
+// temp files created
+file_put_contents("$dirname/image.jPg", '');
+file_put_contents("$dirname/image.gIf", '');
+file_put_contents("$dirname/image.png", '');
+
+sort_var_dump(glob("$dirname/*.{[jJ][pP][gG],[gG][iI][fF]}", GLOB_BRACE));
+
+function sort_var_dump($results) {
+ sort($results);
+ var_dump($results);
+}
+
+?>
+--CLEAN--
+<?php
+
+$file_path = dirname(__FILE__);
+unlink("$file_path/bug69628/image.jPg");
+unlink("$file_path/bug69628/image.gIf");
+unlink("$file_path/bug69628/image.png");
+rmdir("$file_path/bug69628/");
+
+?>
+--EXPECTF--
+array(2) {
+ [0]=>
+ string(%d) "%s/bug69628/image.gIf"
+ [1]=>
+ string(%d) "%s/bug69628/image.jPg"
+}
diff --git a/ext/standard/tests/file/glob_variation.phpt b/ext/standard/tests/file/glob_variation.phpt
index 00fd6ff3ed..9d3b879379 100644
--- a/ext/standard/tests/file/glob_variation.phpt
+++ b/ext/standard/tests/file/glob_variation.phpt
@@ -5,6 +5,9 @@ Test glob() function: usage variations
if (substr(PHP_OS, 0, 3) == 'WIN') {
die('skip.. Not valid for Windows');
}
+if (!defined('GLOB_BRACE')) {
+ die('skip this test requires GLOB_BRACE support');
+}
?>
--FILE--
<?php
diff --git a/win32/glob.c b/win32/glob.c
index 8111daba1c..a61c4f3ef0 100644
--- a/win32/glob.c
+++ b/win32/glob.c
@@ -293,17 +293,19 @@ globexp2(ptr, pattern, pglob, rv)
}
for (i = 0, pl = pm = ptr; pm <= pe; pm++) {
+ const Char *pb;
+
switch (*pm) {
case LBRACKET:
/* Ignore everything between [] */
- for (pl = pm++; *pm != RBRACKET && *pm != EOS; pm++)
+ for (pb = pm++; *pm != RBRACKET && *pm != EOS; pm++)
;
if (*pm == EOS) {
/*
* We could not find a matching RBRACKET.
* Ignore and just look for RBRACE
*/
- pm = pl;
+ pm = pb;
}
break;