]> granicus.if.org Git - php/commitdiff
Addendum for patch to bug #55214: Class name was freed before method literal referrin...
authorStefan Marr <gron@php.net>
Mon, 15 Aug 2011 08:29:48 +0000 (08:29 +0000)
committerStefan Marr <gron@php.net>
Mon, 15 Aug 2011 08:29:48 +0000 (08:29 +0000)
# Thanks to Felipe for catching this.
# The fix duplicates the name into the literal to avoid the dependency

Zend/zend_compile.c

index 96fd936ace24b67235c37addb7ee8d16598f9ae3..6fdd4a6d3e7e918c2a68c90e2e47efbbd92f7014 100644 (file)
@@ -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;
                        }