From: Dmitry Stogov Date: Tue, 26 Nov 2013 17:00:00 +0000 (+0400) Subject: Fixed bug #66176 (Invalid constant substitution) X-Git-Tag: php-5.6.0alpha1~180^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d79dd9cc1cab03aecf6d3f6ec243bc15aa353234;p=php Fixed bug #66176 (Invalid constant substitution) --- diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c index 35d2ce18b5..8c4c58e493 100644 --- a/ext/opcache/Optimizer/block_pass.c +++ b/ext/opcache/Optimizer/block_pass.c @@ -643,8 +643,11 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array, opline->opcode != ZEND_FREE ) { zend_op *src = VAR_SOURCE(opline->op1); + zval c = ZEND_OP1_LITERAL(src); VAR_UNSET(opline->op1); - update_op1_const(op_array, opline, &ZEND_OP1_LITERAL(src) TSRMLS_CC); + zval_copy_ctor(&c); + update_op1_const(op_array, opline, &c TSRMLS_CC); + literal_dtor(&ZEND_OP1_LITERAL(src)); MAKE_NOP(src); } @@ -654,8 +657,11 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array, VAR_SOURCE(opline->op2)->opcode == ZEND_QM_ASSIGN && ZEND_OP1_TYPE(VAR_SOURCE(opline->op2)) == IS_CONST) { zend_op *src = VAR_SOURCE(opline->op2); + zval c = ZEND_OP1_LITERAL(src); VAR_UNSET(opline->op2); - update_op2_const(op_array, opline, &ZEND_OP1_LITERAL(src) TSRMLS_CC); + zval_copy_ctor(&c); + update_op2_const(op_array, opline, &c TSRMLS_CC); + literal_dtor(&ZEND_OP1_LITERAL(src)); MAKE_NOP(src); }