summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndi Gutmans <andi@php.net>2000-02-16 16:49:44 +0000
committerAndi Gutmans <andi@php.net>2000-02-16 16:49:44 +0000
commit9bb9221642cf320af9ab528dbe5df2f62aa7987e (patch)
tree46853bdfea98269d3af14aca19df38509f1ac9d7
parenta5c143f415ea90472e215702b4afc56123e71cc4 (diff)
downloadphp-git-9bb9221642cf320af9ab528dbe5df2f62aa7987e.tar.gz
-Fix bug 3504 concerning leaks with unset()
-rw-r--r--Zend/zend_execute.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index fd3715fc00..017b072cba 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1248,9 +1248,11 @@ binary_assign_op_addr: {
NEXT_OPCODE();
case ZEND_FETCH_UNSET:
zend_fetch_var_address(&opline->result, &opline->op1, &opline->op2, Ts, BP_VAR_R ELS_CC);
+ PZVAL_UNLOCK(*Ts[opline->result.u.var].var.ptr_ptr);
if (Ts[opline->result.u.var].var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
SEPARATE_ZVAL_IF_NOT_REF(Ts[opline->result.u.var].var.ptr_ptr);
}
+ PZVAL_LOCK(*Ts[opline->result.u.var].var.ptr_ptr);
NEXT_OPCODE();
case ZEND_FETCH_IS:
zend_fetch_var_address(&opline->result, &opline->op1, &opline->op2, Ts, BP_VAR_IS ELS_CC);
@@ -1290,9 +1292,11 @@ binary_assign_op_addr: {
}
*/
zend_fetch_dimension_address(&opline->result, &opline->op1, &opline->op2, Ts, BP_VAR_R ELS_CC);
+ PZVAL_UNLOCK(*Ts[opline->result.u.var].var.ptr_ptr);
if (Ts[opline->result.u.var].var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
SEPARATE_ZVAL_IF_NOT_REF(Ts[opline->result.u.var].var.ptr_ptr);
}
+ PZVAL_LOCK(*Ts[opline->result.u.var].var.ptr_ptr);
NEXT_OPCODE();
case ZEND_FETCH_OBJ_R:
zend_fetch_property_address(&opline->result, &opline->op1, &opline->op2, Ts, BP_VAR_R ELS_CC);
@@ -1319,9 +1323,12 @@ binary_assign_op_addr: {
NEXT_OPCODE();
case ZEND_FETCH_OBJ_UNSET:
zend_fetch_property_address(&opline->result, &opline->op1, &opline->op2, Ts, BP_VAR_R ELS_CC);
+
+ PZVAL_UNLOCK(*Ts[opline->result.u.var].var.ptr_ptr);
if (Ts[opline->result.u.var].var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
SEPARATE_ZVAL_IF_NOT_REF(Ts[opline->result.u.var].var.ptr_ptr);
}
+ PZVAL_LOCK(*Ts[opline->result.u.var].var.ptr_ptr);
NEXT_OPCODE();
case ZEND_FETCH_DIM_TMP_VAR:
zend_fetch_dimension_address_from_tmp_var(&opline->result, &opline->op1, &opline->op2, Ts ELS_CC);