From: Stefan Marr Date: Mon, 15 Aug 2011 08:29:48 +0000 (+0000) Subject: Addendum for patch to bug #55214: Class name was freed before method literal referrin... X-Git-Tag: php-5.4.0beta1~426 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c312e602803013c4743234776616b0f1f6296151;p=php Addendum for patch to bug #55214: Class name was freed before method literal referring to it. # Thanks to Felipe for catching this. # The fix duplicates the name into the literal to avoid the dependency --- diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d8749f62bd..34f0b34cbe 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3544,7 +3544,7 @@ static void zend_traits_duplicate_function(zend_function *fe, zend_class_entry * /* Only on merge into an actual class */ && (ZEND_ACC_TRAIT != (target_ce->ce_flags & ZEND_ACC_TRAIT))) { INIT_ZVAL(class_name_zv); - ZVAL_STRINGL(&class_name_zv, target_ce->name, target_ce->name_length, 0); + ZVAL_STRINGL(&class_name_zv, target_ce->name, target_ce->name_length, 1); class_name_literal = zend_add_literal(&fe->op_array, &class_name_zv TSRMLS_CC); opcode_copy[i].op1.zv = &fe->op_array.literals[class_name_literal].constant; } @@ -3564,7 +3564,7 @@ static void zend_traits_duplicate_function(zend_function *fe, zend_class_entry * /* Only on merge into an actual class */ && (ZEND_ACC_TRAIT != (target_ce->ce_flags & ZEND_ACC_TRAIT))) { INIT_ZVAL(class_name_zv); - ZVAL_STRINGL(&class_name_zv, target_ce->name, target_ce->name_length, 0); + ZVAL_STRINGL(&class_name_zv, target_ce->name, target_ce->name_length, 1); class_name_literal = zend_add_literal(&fe->op_array, &class_name_zv TSRMLS_CC); opcode_copy[i].op2.zv = &fe->op_array.literals[class_name_literal].constant; }