From 90b6b31f06a7ff990c462d6ec012b28c54a31faf Mon Sep 17 00:00:00 2001 From: Stefan Siegl Date: Fri, 13 Jul 2018 15:41:41 +0200 Subject: [PATCH] break recursion immediately on PHP <= 7.2 as well --- tests/array_recursive.phpt | 25 +++++++++++++++++++++++++ v8js_convert.cc | 15 +++++++++------ 2 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 tests/array_recursive.phpt diff --git a/tests/array_recursive.phpt b/tests/array_recursive.phpt new file mode 100644 index 0000000..47df7ea --- /dev/null +++ b/tests/array_recursive.phpt @@ -0,0 +1,25 @@ +--TEST-- +Test V8::executeString() : export of recursive array +--SKIPIF-- + +--FILE-- +foo = $a; +$v8->executeString('var_dump(PHP.foo);'); + +?> +===EOF=== +--EXPECT-- +array(2) { + [0] => + NULL + [1] => + int(23) +} +===EOF=== diff --git a/v8js_convert.cc b/v8js_convert.cc index b701154..3f91dd1 100644 --- a/v8js_convert.cc +++ b/v8js_convert.cc @@ -71,10 +71,11 @@ static v8::Local v8js_hash_to_jsarr(zval *value, v8::Isolate *isolate /* Prevent recursion */ #if PHP_VERSION_ID >= 70300 - if (myht && GC_IS_RECURSIVE(myht)) { + if (myht && GC_IS_RECURSIVE(myht)) #else - if (myht && ZEND_HASH_GET_APPLY_COUNT(myht) > 1) { + if (myht && ZEND_HASH_GET_APPLY_COUNT(myht) > 0) #endif + { return V8JS_NULL; } @@ -86,10 +87,11 @@ static v8::Local v8js_hash_to_jsarr(zval *value, v8::Isolate *isolate ulong index = 0; #if PHP_VERSION_ID >= 70300 - if (myht && !(GC_FLAGS(myht) & GC_IMMUTABLE)) { + if (myht && !(GC_FLAGS(myht) & GC_IMMUTABLE)) #else - if (myht) { + if (myht) #endif + { GC_PROTECT_RECURSION(myht); } @@ -98,10 +100,11 @@ static v8::Local v8js_hash_to_jsarr(zval *value, v8::Isolate *isolate } ZEND_HASH_FOREACH_END(); #if PHP_VERSION_ID >= 70300 - if (myht && !(GC_FLAGS(myht) & GC_IMMUTABLE)) { + if (myht && !(GC_FLAGS(myht) & GC_IMMUTABLE)) #else - if (myht) { + if (myht) #endif + { GC_UNPROTECT_RECURSION(myht); } }