summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2019-11-27 09:34:57 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2019-11-27 09:34:57 +0100
commitb6e79f3724772e0a6e3729314bc659f673244d03 (patch)
tree2d6b20d11ff7d058ab9fbc91079fb58a88548eef /ext
parentb046a8f7f8e1e68b217021fa3179f4a62788e818 (diff)
parent30aa2e8932adf090776ac814dd78bf008b265625 (diff)
downloadphp-git-b6e79f3724772e0a6e3729314bc659f673244d03.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Fix #78840: imploding $GLOBALS crashes
Diffstat (limited to 'ext')
-rw-r--r--ext/standard/string.c4
-rw-r--r--ext/standard/tests/strings/bug78840.phpt10
2 files changed, 12 insertions, 2 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 75162a19ca..66778f9043 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -1193,14 +1193,14 @@ PHPAPI void php_implode(const zend_string *glue, zval *pieces, zval *return_valu
RETURN_EMPTY_STRING();
} else if (numelems == 1) {
/* loop to search the first not undefined element... */
- ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pieces), tmp) {
+ ZEND_HASH_FOREACH_VAL_IND(Z_ARRVAL_P(pieces), tmp) {
RETURN_STR(zval_get_string(tmp));
} ZEND_HASH_FOREACH_END();
}
ptr = strings = do_alloca((sizeof(*strings)) * numelems, use_heap);
- ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pieces), tmp) {
+ ZEND_HASH_FOREACH_VAL_IND(Z_ARRVAL_P(pieces), tmp) {
if (EXPECTED(Z_TYPE_P(tmp) == IS_STRING)) {
ptr->str = Z_STR_P(tmp);
len += ZSTR_LEN(ptr->str);
diff --git a/ext/standard/tests/strings/bug78840.phpt b/ext/standard/tests/strings/bug78840.phpt
new file mode 100644
index 0000000000..b9e1a84a76
--- /dev/null
+++ b/ext/standard/tests/strings/bug78840.phpt
@@ -0,0 +1,10 @@
+--TEST--
+Bug #78840 (imploding $GLOBALS crashes)
+--FILE--
+<?php
+$glue = '';
+@implode($glue, $GLOBALS);
+echo "done\n";
+?>
+--EXPECT--
+done