summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r--Zend/zend_execute.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index b18a8ef27d..e6e7ac3d8e 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1217,19 +1217,16 @@ binary_assign_op_addr: {
case ZEND_ADD_VAR: {
zval *var = get_zval_ptr(&opline->op2, Ts, &free_op2, BP_VAR_R);
zval var_copy;
- int destroy=0;
+ int use_copy;
- if (var->type != IS_STRING) {
- var_copy = *var;
- zval_copy_ctor(&var_copy);
+ zend_make_printable_zval(var, &var_copy, &use_copy);
+ if (use_copy) {
var = &var_copy;
- convert_to_string(var);
- destroy=1;
}
add_string_to_string( &Ts[opline->result.u.var].tmp_var,
get_zval_ptr(&opline->op1, Ts, &free_op1, BP_VAR_NA),
var);
- if (destroy) {
+ if (use_copy) {
zval_dtor(var);
}
/* original comment, possibly problematic: