Skip to content

Commit de71f83

Browse files
authored
Merge pull request #252 from stesie/issue-246
Handle Z_TYPE == IS_REFERENCE well, fixes #246
2 parents dbd97ac + 8126fc4 commit de71f83

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

tests/issue_246_001.phpt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
Test V8::executeString() : Handle Z_TYPE == IS_REFERENCE (issue #246)
3+
--SKIPIF--
4+
<?php
5+
require_once(dirname(__FILE__) . '/skipif.inc');
6+
?>
7+
--FILE--
8+
<?php
9+
$v8 = new V8Js();
10+
$array = ['lorem' => 'ipsum'];
11+
array_walk_recursive($array, function (&$item) {});
12+
$v8->some_array = $array;
13+
$v8->executeString('var_dump(PHP.some_array.lorem);');
14+
?>
15+
===EOF===
16+
--EXPECT--
17+
string(5) "ipsum"
18+
===EOF===

v8js_convert.cc

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,16 @@ v8::Handle<v8::Value> zval_to_v8js(zval *value, v8::Isolate *isolate TSRMLS_DC)
104104
long v;
105105
zend_class_entry *ce;
106106

107-
if(Z_TYPE_P(value) == IS_INDIRECT)
108-
value = Z_INDIRECT_P(value);
109-
110107
switch (Z_TYPE_P(value))
111108
{
109+
case IS_INDIRECT:
110+
jsValue = zval_to_v8js(Z_INDIRECT_P(value), isolate);
111+
break;
112+
113+
case IS_REFERENCE:
114+
jsValue = zval_to_v8js(Z_REFVAL_P(value), isolate);
115+
break;
116+
112117
case IS_ARRAY:
113118
jsValue = v8js_hash_to_jsarr(value, isolate TSRMLS_CC);
114119
break;
@@ -163,8 +168,10 @@ v8::Handle<v8::Value> zval_to_v8js(zval *value, v8::Isolate *isolate TSRMLS_DC)
163168
case IS_UNDEF:
164169
default:
165170
/* undefined -> return v8::Value left empty */
171+
jsValue = v8::Undefined(isolate);
166172
break;
167173
}
174+
168175
return jsValue;
169176
}
170177
/* }}} */

0 commit comments

Comments
 (0)