From 12c53f28ebd4d0b95a990f9617ea78b5fe466f9d Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Mon, 11 Apr 2016 10:37:11 +0800 Subject: [PATCH] Fixed nApplyCount checking --- lua.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lua.c b/lua.c index 22b27ad..65e2378 100755 --- a/lua.c +++ b/lua.c @@ -442,11 +442,15 @@ int php_lua_send_zval_to_lua(lua_State *L, zval *val) /* {{{ */ { zval zkey; HashTable *ht = HASH_OF(val); - if (++ht->u.v.nApplyCount > 1) { - php_error_docref(NULL, E_ERROR, "recursion found"); - --ht->u.v.nApplyCount; - break; + if (ZEND_HASH_APPLY_PROTECTION(ht)) { + ZEND_HASH_INC_APPLY_COUNT(ht); + if (ZEND_HASH_GET_APPLY_COUNT(ht) > 1) { + php_error_docref(NULL, E_ERROR, "recursion found"); + ZEND_HASH_DEC_APPLY_COUNT(ht); + break; + } } + lua_newtable(L); ZEND_HASH_FOREACH_KEY_VAL_IND(ht, longkey, key, v) { @@ -460,7 +464,9 @@ int php_lua_send_zval_to_lua(lua_State *L, zval *val) /* {{{ */ { lua_settable(L, -3); } ZEND_HASH_FOREACH_END(); - --ht->u.v.nApplyCount; + if (ZEND_HASH_APPLY_PROTECTION(ht)) { + ZEND_HASH_DEC_APPLY_COUNT(ht); + } } } break;