mirror of
https://github.com/php-win-ext/php-lua.git
synced 2026-03-24 00:52:12 +01:00
Fixed hash recursive detecting
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
dnl $Id: config.m4 321796 2012-01-05 17:23:48Z laruence $
|
||||
PHP_ARG_WITH(lua, for lua support,
|
||||
[ --with-lua=[DIR] Include php lua support])
|
||||
PHP_ARG_WITH(lua-version, to specify a custom lua version, [ --with-lua-version=[VERSION]] Use the specified lua version.)
|
||||
|
||||
36
lua.c
36
lua.c
@@ -430,13 +430,29 @@ try_again:
|
||||
zval zkey;
|
||||
|
||||
HashTable *ht = HASH_OF(val);
|
||||
if (ZEND_HASH_APPLY_PROTECTION(ht)) {
|
||||
ZEND_HASH_INC_APPLY_COUNT(ht);
|
||||
if (ZEND_HASH_GET_APPLY_COUNT(ht) > 1) {
|
||||
if (
|
||||
#if PHP_VERSION_ID < 70300
|
||||
ZEND_HASH_APPLY_PROTECTION(ht)
|
||||
#else
|
||||
!(GC_FLAGS(ht) & GC_IMMUTABLE)
|
||||
#endif
|
||||
) {
|
||||
if (
|
||||
#if PHP_VERSION_ID < 70300
|
||||
ZEND_HASH_GET_APPLY_COUNT(ht)
|
||||
#else
|
||||
GC_IS_RECURSIVE(ht)
|
||||
#endif
|
||||
) {
|
||||
|
||||
php_error_docref(NULL, E_ERROR, "recursion found");
|
||||
ZEND_HASH_DEC_APPLY_COUNT(ht);
|
||||
break;
|
||||
}
|
||||
#if PHP_VERSION_ID < 70300
|
||||
ZEND_HASH_INC_APPLY_COUNT(ht);
|
||||
#else
|
||||
GC_PROTECT_RECURSION(ht);
|
||||
#endif
|
||||
}
|
||||
|
||||
lua_newtable(L);
|
||||
@@ -452,8 +468,18 @@ try_again:
|
||||
lua_settable(L, -3);
|
||||
} ZEND_HASH_FOREACH_END();
|
||||
|
||||
if (ZEND_HASH_APPLY_PROTECTION(ht)) {
|
||||
if (
|
||||
#if PHP_VERSION_ID < 70300
|
||||
ZEND_HASH_APPLY_PROTECTION(ht)
|
||||
#else
|
||||
!(GC_FLAGS(ht) & GC_IMMUTABLE)
|
||||
#endif
|
||||
) {
|
||||
#if PHP_VERSION_ID < 70300
|
||||
ZEND_HASH_DEC_APPLY_COUNT(ht);
|
||||
#else
|
||||
GC_UNPROTECT_RECURSION(ht);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user