From eff65944b5ec420c0584d5209312f5a5be1a1bb2 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 26 Jun 2018 12:27:09 +0200 Subject: [PATCH] Fix for PHP 7.3 - Array/Object recursion protection --- lua.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lua.c b/lua.c index 310bf8f..22bc589 100755 --- a/lua.c +++ b/lua.c @@ -430,6 +430,7 @@ int php_lua_send_zval_to_lua(lua_State *L, zval *val) /* {{{ */ { zval zkey; HashTable *ht = HASH_OF(val); +#if PHP_VERSION_ID < 70300 if (ZEND_HASH_APPLY_PROTECTION(ht)) { ZEND_HASH_INC_APPLY_COUNT(ht); if (ZEND_HASH_GET_APPLY_COUNT(ht) > 1) { @@ -437,6 +438,15 @@ int php_lua_send_zval_to_lua(lua_State *L, zval *val) /* {{{ */ { ZEND_HASH_DEC_APPLY_COUNT(ht); break; } +#else + if (!(GC_FLAGS(ht) & GC_IMMUTABLE)) { + if (GC_IS_RECURSIVE(ht)) { + php_error_docref(NULL, E_ERROR, "recursion found"); + break; + } else { + GC_PROTECT_RECURSION(ht); + } +#endif } lua_newtable(L); @@ -452,8 +462,13 @@ int php_lua_send_zval_to_lua(lua_State *L, zval *val) /* {{{ */ { lua_settable(L, -3); } ZEND_HASH_FOREACH_END(); +#if PHP_VERSION_ID < 70300 if (ZEND_HASH_APPLY_PROTECTION(ht)) { ZEND_HASH_DEC_APPLY_COUNT(ht); +#else + if (!(GC_FLAGS(ht) & GC_IMMUTABLE)) { + GC_UNPROTECT_RECURSION(ht); +#endif } } }