cvs: ZendEngine2(PHP_5_2) / zend_vm_def.h zend_vm_execute.h /tests bug47109.phpt php-src NEWS
[email protected] ("Dmitry Stogov") Thu, 15 Jan 2009 08:48:43 -0000
| Newsgroups | php.zend-engine.cvs |
|---|---|
| Message-ID | <cvsdmitry1232009323@cvsserver> |
dmitry Thu Jan 15 08:48:43 2009 UTC
Added files: (Branch: PHP_5_2)
/ZendEngine2/tests bug47109.phpt
Modified files:
/php-src NEWS
/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-20090115084843.txt
(text/plain, 11.4 KB)
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.1392&r2=1.2027.2.547.2.1393&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.1392 php-src/NEWS:1.2027.2.547.2.1393
--- php-src/NEWS:1.2027.2.547.2.1392 Wed Jan 14 10:51:35 2009
+++ php-src/NEWS Thu Jan 15 08:48:39 2009
@@ -17,6 +17,8 @@
- Fixed bug in xml_error_string() which resulted in messages being
off by one. (Scott)
+- Fixed bug #47109 (Memory leak on $a->{"a"."b"} when $a is not an object).
+ (Etienne, Dmitry)
- Fixed bug #47042 (PHP cgi sapi is removing SCRIPT_FILENAME for non apache).
(Sriram Natarajan)
- Fixed bug #47037 (No error when using fopen with empty string).
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.59.2.29.2.62&r2=1.59.2.29.2.63&diff_format=u
Index: ZendEngine2/zend_vm_def.h
diff -u ZendEngine2/zend_vm_def.h:1.59.2.29.2.62 ZendEngine2/zend_vm_def.h:1.59.2.29.2.63
--- ZendEngine2/zend_vm_def.h:1.59.2.29.2.62 Sat Jan 10 20:30:48 2009
+++ ZendEngine2/zend_vm_def.h Thu Jan 15 08:48:40 2009
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_vm_def.h,v 1.59.2.29.2.62 2009/01/10 20:30:48 felipe Exp $ */
+/* $Id: zend_vm_def.h,v 1.59.2.29.2.63 2009/01/15 08:48:40 dmitry Exp $ */
/* If you change this file, please regenerate the zend_vm_execute.h and
* zend_vm_opcodes.h files by running:
@@ -1182,6 +1182,8 @@
zval *container;
zval **retval;
zend_free_op free_op1;
+ zend_free_op free_op2;
+ zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -1194,6 +1196,7 @@
PZVAL_LOCK(*retval);
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+ FREE_OP2();
FREE_OP1();
ZEND_VM_NEXT_OPCODE();
}
@@ -1206,10 +1209,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
+ FREE_OP2();
} else {
- zend_free_op free_op2;
- zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
-
if (IS_OP2_TMP_FREE()) {
MAKE_REAL_ZVAL_PTR(offset);
}
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.62.2.30.2.65&r2=1.62.2.30.2.66&diff_format=u
Index: ZendEngine2/zend_vm_execute.h
diff -u ZendEngine2/zend_vm_execute.h:1.62.2.30.2.65 ZendEngine2/zend_vm_execute.h:1.62.2.30.2.66
--- ZendEngine2/zend_vm_execute.h:1.62.2.30.2.65 Sat Jan 10 20:30:48 2009
+++ ZendEngine2/zend_vm_execute.h Thu Jan 15 08:48:40 2009
@@ -9142,6 +9142,8 @@
zval **retval;
zend_free_op free_op1;
+ zval *offset = &opline->op2.u.constant;
+
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -9153,6 +9155,7 @@
PZVAL_LOCK(*retval);
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -9165,10 +9168,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
- } else {
-
- zval *offset = &opline->op2.u.constant;
+ } else {
if (0) {
MAKE_REAL_ZVAL_PTR(offset);
}
@@ -10660,6 +10661,8 @@
zval *container;
zval **retval;
zend_free_op free_op1;
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -10672,6 +10675,7 @@
PZVAL_LOCK(*retval);
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+ zval_dtor(free_op2.var);
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -10684,10 +10688,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
+ 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);
-
if (1) {
MAKE_REAL_ZVAL_PTR(offset);
}
@@ -12182,6 +12184,8 @@
zval *container;
zval **retval;
zend_free_op free_op1;
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -12194,6 +12198,7 @@
PZVAL_LOCK(*retval);
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+ if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -12206,10 +12211,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
+ 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);
-
if (0) {
MAKE_REAL_ZVAL_PTR(offset);
}
@@ -14201,6 +14204,8 @@
zval **retval;
zend_free_op free_op1;
+ zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -14212,6 +14217,7 @@
PZVAL_LOCK(*retval);
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -14224,10 +14230,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
- } else {
-
- zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ } else {
if (0) {
MAKE_REAL_ZVAL_PTR(offset);
}
@@ -15470,6 +15474,8 @@
zval **retval;
+ zval *offset = &opline->op2.u.constant;
+
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -15482,6 +15488,7 @@
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+
ZEND_VM_NEXT_OPCODE();
}
@@ -15493,10 +15500,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
- } else {
-
- zval *offset = &opline->op2.u.constant;
+ } else {
if (0) {
MAKE_REAL_ZVAL_PTR(offset);
}
@@ -16493,6 +16498,8 @@
zval *container;
zval **retval;
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -16505,6 +16512,7 @@
PZVAL_LOCK(*retval);
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+ zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
}
@@ -16517,10 +16525,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
+ 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);
-
if (1) {
MAKE_REAL_ZVAL_PTR(offset);
}
@@ -17473,6 +17479,8 @@
zval *container;
zval **retval;
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -17485,6 +17493,7 @@
PZVAL_LOCK(*retval);
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+ if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -17497,10 +17506,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
+ 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);
-
if (0) {
MAKE_REAL_ZVAL_PTR(offset);
}
@@ -18719,6 +18726,8 @@
zval **retval;
+ zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -18731,6 +18740,7 @@
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+
ZEND_VM_NEXT_OPCODE();
}
@@ -18742,10 +18752,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
- } else {
-
- zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ } else {
if (0) {
MAKE_REAL_ZVAL_PTR(offset);
}
@@ -21299,6 +21307,8 @@
zval **retval;
+ zval *offset = &opline->op2.u.constant;
+
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -21311,6 +21321,7 @@
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+
ZEND_VM_NEXT_OPCODE();
}
@@ -21322,10 +21333,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
- } else {
-
- zval *offset = &opline->op2.u.constant;
+ } else {
if (0) {
MAKE_REAL_ZVAL_PTR(offset);
}
@@ -22809,6 +22818,8 @@
zval *container;
zval **retval;
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -22821,6 +22832,7 @@
PZVAL_LOCK(*retval);
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+ zval_dtor(free_op2.var);
ZEND_VM_NEXT_OPCODE();
}
@@ -22833,10 +22845,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
+ 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);
-
if (1) {
MAKE_REAL_ZVAL_PTR(offset);
}
@@ -24323,6 +24333,8 @@
zval *container;
zval **retval;
+ zend_free_op free_op2;
+ zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -24335,6 +24347,7 @@
PZVAL_LOCK(*retval);
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+ if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
ZEND_VM_NEXT_OPCODE();
}
@@ -24347,10 +24360,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
+ 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);
-
if (0) {
MAKE_REAL_ZVAL_PTR(offset);
}
@@ -26332,6 +26343,8 @@
zval **retval;
+ zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+
retval = &EX_T(opline->result.u.var).var.ptr;
EX_T(opline->result.u.var).var.ptr_ptr = retval;
@@ -26344,6 +26357,7 @@
AI_USE_PTR(EX_T(opline->result.u.var).var);
}
+
ZEND_VM_NEXT_OPCODE();
}
@@ -26355,10 +26369,8 @@
*retval = EG(uninitialized_zval_ptr);
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
AI_USE_PTR(EX_T(opline->result.u.var).var);
- } else {
-
- zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
+ } else {
if (0) {
MAKE_REAL_ZVAL_PTR(offset);
}
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug47109.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/bug47109.phpt
+++ ZendEngine2/tests/bug47109.phpt