summaryrefslogtreecommitdiff
path: root/ext/mbstring/mbstring.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2018-11-15 17:13:12 +0100
committerNikita Popov <nikita.ppv@gmail.com>2018-11-15 17:16:39 +0100
commitdee5a450d9b7f7b03f012dd1912cc0a3dcb0482c (patch)
tree2a0727b81684fe683fc9efe3b9a5b3df01840a72 /ext/mbstring/mbstring.c
parent2a062f3c020e8cc53e49fa823021f3e8ce591cfe (diff)
downloadphp-git-dee5a450d9b7f7b03f012dd1912cc0a3dcb0482c.tar.gz
Fixed bug #77165
Also add some helper macros for PROTECT/UNPROTECT that check for IMMUTABLE. These checks are needed for nearly any use of PROTECT/UNPROTECT.
Diffstat (limited to 'ext/mbstring/mbstring.c')
-rw-r--r--ext/mbstring/mbstring.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
index 6554bd72bf..ae8c4bef7f 100644
--- a/ext/mbstring/mbstring.c
+++ b/ext/mbstring/mbstring.c
@@ -3125,7 +3125,7 @@ MBSTRING_API HashTable *php_mb_convert_encoding_recursive(HashTable *input, cons
php_error_docref(NULL, E_WARNING, "Cannot convert recursively referenced values");
return NULL;
}
- GC_PROTECT_RECURSION(input);
+ GC_TRY_PROTECT_RECURSION(input);
output = zend_new_array(zend_hash_num_elements(input));
ZEND_HASH_FOREACH_KEY_VAL(input, idx, key, entry) {
/* convert key */
@@ -3170,7 +3170,7 @@ MBSTRING_API HashTable *php_mb_convert_encoding_recursive(HashTable *input, cons
zend_hash_index_add(output, idx, &entry_tmp);
}
} ZEND_HASH_FOREACH_END();
- GC_UNPROTECT_RECURSION(input);
+ GC_TRY_UNPROTECT_RECURSION(input);
return output;
}
@@ -4738,7 +4738,7 @@ MBSTRING_API int php_mb_check_encoding_recursive(HashTable *vars, const zend_str
php_error_docref(NULL, E_WARNING, "Cannot not handle circular references");
return 0;
}
- GC_PROTECT_RECURSION(vars);
+ GC_TRY_PROTECT_RECURSION(vars);
ZEND_HASH_FOREACH_KEY_VAL(vars, idx, key, entry) {
ZVAL_DEREF(entry);
if (key) {
@@ -4772,7 +4772,7 @@ MBSTRING_API int php_mb_check_encoding_recursive(HashTable *vars, const zend_str
break;
}
} ZEND_HASH_FOREACH_END();
- GC_UNPROTECT_RECURSION(vars);
+ GC_TRY_UNPROTECT_RECURSION(vars);
mbfl_buffer_converter_delete(convd);
return valid;
}