diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2019-11-27 09:34:57 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2019-11-27 09:34:57 +0100 |
commit | b6e79f3724772e0a6e3729314bc659f673244d03 (patch) | |
tree | 2d6b20d11ff7d058ab9fbc91079fb58a88548eef /ext | |
parent | b046a8f7f8e1e68b217021fa3179f4a62788e818 (diff) | |
parent | 30aa2e8932adf090776ac814dd78bf008b265625 (diff) | |
download | php-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.c | 4 | ||||
-rw-r--r-- | ext/standard/tests/strings/bug78840.phpt | 10 |
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 |