|
|
|
@ -466,10 +466,20 @@ static inline void zend_assign_to_variable(znode *result, znode *op1, znode *op2 |
|
|
|
} |
|
|
|
|
|
|
|
T->EA.data.str_offset.str->value.str.val[T->EA.data.str_offset.offset] = final_value->value.str.val[0]; |
|
|
|
if (op2 |
|
|
|
&& op2->op_type != IS_VAR |
|
|
|
&& final_value == &T(op2->u.var).tmp_var) { |
|
|
|
STR_FREE(final_value->value.str.val); |
|
|
|
|
|
|
|
if (op2) { |
|
|
|
if (op2->op_type == IS_VAR) { |
|
|
|
if (value == &T(op2->u.var).tmp_var) { |
|
|
|
STR_FREE(value->value.str.val); |
|
|
|
} |
|
|
|
} else { |
|
|
|
if (final_value == &T(op2->u.var).tmp_var) { |
|
|
|
/* we can safely free final_value here |
|
|
|
* because separation is done only |
|
|
|
* in case op2->op_type == IS_VAR */ |
|
|
|
STR_FREE(final_value->value.str.val); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (final_value == &tmp) { |
|
|
|
zval_dtor(final_value); |
|
|
|
|