cvs: ZendEngine2(PHP_5_3) / zend_vm_def.h zend_vm_execute.h /tests bug47109.phpt
[email protected] ("Dmitry Stogov") Thu, 15 Jan 2009 08:49:01 -0000
| Newsgroups | php.zend-engine.cvs |
|---|---|
| Message-ID | <cvsdmitry1232009341@cvsserver> |
dmitry Thu Jan 15 08:49:01 2009 UTC
Added files: (Branch: PHP_5_3)
/ZendEngine2/tests bug47109.phpt
Modified files:
/ZendEngine2 zend_vm_def.h zend_vm_execute.h
Log:
Fixed bug #47109 (Memory leak on $a->{"a"."b"} when $a is not an object)
dmitry-20090115084901.txt
(text/plain, 11.2 KB)
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.59.2.29.2.48.2.81&r2=1.59.2.29.2.48.2.82&diff_format=u
Index: ZendEngine2/zend_vm_def.h
diff -u ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.81 ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.82
--- ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.81 Sat Jan 10 19:15:39 2009
+++ ZendEngine2/zend_vm_def.h Thu Jan 15 08:48:56 2009
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_vm_def.h,v 1.59.2.29.2.48.2.81 2009/01/10 19:15:39 felipe Exp $ */
+/* $Id: zend_vm_def.h,v 1.59.2.29.2.48.2.82 2009/01/15 08:48:56 dmitry Exp $ */
/* If you change this file, please regenerate the zend_vm_execute.h and
* zend_vm_opcodes.h files by running:
@@ -1236,12 +1236,15 @@
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *container = GET_OP1_OBJ_ZVAL_PTR(type);
+ zend_free_op free_op2;
+ zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+ FREE_OP2();
FREE_OP1();
ZEND_VM_NEXT_OPCODE();
}
@@ -1255,9 +1258,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
+ FREE_OP2();
} else {
- zend_free_op free_op2;
- zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
zval *retval;
if (IS_OP2_TMP_FREE()) {
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.62.2.30.2.49.2.81&r2=1.62.2.30.2.49.2.82&diff_format=u
Index: ZendEngine2/zend_vm_execute.h
diff -u ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.81 ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.82
--- ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.81 Sat Jan 10 19:15:40 2009
+++ ZendEngine2/zend_vm_execute.h Thu Jan 15 08:48:56 2009
@@ -9906,11 +9906,14 @@
zend_free_op free_op1;
zval *container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ zval *offset = &opline->op2.u.constant;
+
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -9924,9 +9927,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
- } else {
- zval *offset = &opline->op2.u.constant;
+ } else {
zval *retval;
if (0) {
@@ -11740,12 +11742,15 @@
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+ zval_dtor(free_op2.var);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -11759,9 +11764,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
+ zval_dtor(free_op2.var);
} else {
- zend_free_op free_op2;
- zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
zval *retval;
if (1) {
@@ -13521,12 +13525,15 @@
zend_op *opline = EX(opline);
zend_free_op free_op1;
zval *container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+ if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -13540,9 +13547,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
+ if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
} else {
- zend_free_op free_op2;
- zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
zval *retval;
if (0) {
@@ -15967,11 +15973,14 @@
zend_free_op free_op1;
zval *container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
+ zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -15985,9 +15994,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
- } else {
- zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ } else {
zval *retval;
if (0) {
@@ -17453,12 +17461,15 @@
zval *container = _get_obj_zval_ptr_unused(TSRMLS_C);
+ zval *offset = &opline->op2.u.constant;
+
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+
ZEND_VM_NEXT_OPCODE();
}
@@ -17471,9 +17482,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
- } else {
- zval *offset = &opline->op2.u.constant;
+ } else {
zval *retval;
if (0) {
@@ -18584,12 +18594,15 @@
zend_op *opline = EX(opline);
zval *container = _get_obj_zval_ptr_unused(TSRMLS_C);
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+ zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
}
@@ -18603,9 +18616,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
+ zval_dtor(free_op2.var);
} else {
- zend_free_op free_op2;
- zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
zval *retval;
if (1) {
@@ -19661,12 +19673,15 @@
zend_op *opline = EX(opline);
zval *container = _get_obj_zval_ptr_unused(TSRMLS_C);
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+ if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -19680,9 +19695,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
+ if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
} else {
- zend_free_op free_op2;
- zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
zval *retval;
if (0) {
@@ -21010,12 +21024,15 @@
zval *container = _get_obj_zval_ptr_unused(TSRMLS_C);
+ zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+
ZEND_VM_NEXT_OPCODE();
}
@@ -21028,9 +21045,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
- } else {
- zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ } else {
zval *retval;
if (0) {
@@ -23790,12 +23806,15 @@
zval *container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC);
+ zval *offset = &opline->op2.u.constant;
+
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+
ZEND_VM_NEXT_OPCODE();
}
@@ -23808,9 +23827,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
- } else {
- zval *offset = &opline->op2.u.constant;
+ } else {
zval *retval;
if (0) {
@@ -25455,12 +25473,15 @@
zend_op *opline = EX(opline);
zval *container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC);
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+ zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
}
@@ -25474,9 +25495,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
+ zval_dtor(free_op2.var);
} else {
- zend_free_op free_op2;
- zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
zval *retval;
if (1) {
@@ -27124,12 +27144,15 @@
zend_op *opline = EX(opline);
zval *container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC);
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+ if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -27143,9 +27166,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
+ if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
} else {
- zend_free_op free_op2;
- zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
zval *retval;
if (0) {
@@ -29355,12 +29377,15 @@
zval *container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC);
+ zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+
if (container == EG(error_zval_ptr)) {
if (!RETURN_VALUE_UNUSED(&opline->result)) {
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(error_zval_ptr));
PZVAL_LOCK(EG(error_zval_ptr));
}
+
ZEND_VM_NEXT_OPCODE();
}
@@ -29373,9 +29398,8 @@
AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
PZVAL_LOCK(EG(uninitialized_zval_ptr));
}
- } else {
- zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ } else {
zval *retval;
if (0) {
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug47109.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/bug47109.phpt
+++ ZendEngine2/tests/bug47109.phpt