diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2019-04-12 10:36:26 +0200 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-04-12 10:36:58 +0200 |
| commit | 3b53d28e607ba60e8a25b1fca8317565eab28b77 (patch) | |
| tree | cb411eff4b3f5fc8f51216197ce3a086c8593145 /ext/mbstring/mbstring.c | |
| parent | 5477d683008790dc47a13901f9d8acd6332955ae (diff) | |
| download | php-git-3b53d28e607ba60e8a25b1fca8317565eab28b77.tar.gz | |
Fix key leaks in mb_convert_encoding()
Diffstat (limited to 'ext/mbstring/mbstring.c')
| -rw-r--r-- | ext/mbstring/mbstring.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index 9973313985..c73a427a68 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -3269,7 +3269,7 @@ MBSTRING_API HashTable *php_mb_convert_encoding_recursive(HashTable *input, cons { HashTable *output, *chash; zend_long idx; - zend_string *key, *key_tmp; + zend_string *key; zval *entry, entry_tmp; size_t ckey_len, cval_len; char *ckey, *cval; @@ -3289,7 +3289,8 @@ MBSTRING_API HashTable *php_mb_convert_encoding_recursive(HashTable *input, cons /* convert key */ if (key) { ckey = php_mb_convert_encoding(ZSTR_VAL(key), ZSTR_LEN(key), _to_encoding, _from_encodings, &ckey_len); - key_tmp = zend_string_init(ckey, ckey_len, 0); + key = zend_string_init(ckey, ckey_len, 0); + efree(ckey); } /* convert value */ ZEND_ASSERT(entry); @@ -3317,13 +3318,14 @@ MBSTRING_API HashTable *php_mb_convert_encoding_recursive(HashTable *input, cons case IS_OBJECT: default: if (key) { - efree(key_tmp); + zend_string_release(key); } php_error_docref(NULL, E_WARNING, "Object is not supported"); continue; } if (key) { - zend_hash_add(output, key_tmp, &entry_tmp); + zend_hash_add(output, key, &entry_tmp); + zend_string_release(key); } else { zend_hash_index_add(output, idx, &entry_tmp); } |
