@@ -2068,7 +2068,9 @@ ZEND_VM_HANDLER(56, ZEND_ADD_VAR, TMP|UNUSED, TMP|VAR|CV)
20682068 }
20692069
20702070 if (Z_TYPE_P (var ) != IS_STRING ) {
2071- ZVAL_DEREF (var );
2071+ if (OP2_TYPE != IS_TMP_VAR ) {
2072+ ZVAL_DEREF (var );
2073+ }
20722074 if (Z_TYPE_P (var ) != IS_STRING ) {
20732075 use_copy = zend_make_printable_zval (var , & var_copy TSRMLS_CC );
20742076
@@ -2395,12 +2397,10 @@ ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST|TMP|VAR|CV)
23952397 zend_free_op free_op2 ;
23962398 zend_class_entry * called_scope ;
23972399 zend_object * object ;
2398- zval * function_name_ptr ;
23992400
24002401 SAVE_OPLINE ();
2401- function_name_ptr = function_name = GET_OP2_ZVAL_PTR (BP_VAR_R );
2402+ function_name = GET_OP2_ZVAL_PTR_DEREF (BP_VAR_R );
24022403
2403- ZVAL_DEREF (function_name );
24042404 if (EXPECTED (Z_TYPE_P (function_name ) == IS_STRING )) {
24052405 if (Z_STRVAL_P (function_name )[0 ] == '\\' ) {
24062406 lcname = zend_string_alloc (Z_STRLEN_P (function_name ) - 1 , 0 );
@@ -2425,10 +2425,9 @@ ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST|TMP|VAR|CV)
24252425 if (object ) {
24262426 GC_REFCOUNT (object )++ ;
24272427 }
2428- if (OP2_TYPE == IS_VAR && Z_REFCOUNT_P (function_name ) == 1 &&
2429- fbc -> common .fn_flags & ZEND_ACC_CLOSURE ) {
2428+ if (OP2_TYPE == IS_VAR && (fbc -> common .fn_flags & ZEND_ACC_CLOSURE )) {
24302429 /* Delay closure destruction until its invocation */
2431- fbc -> common .prototype = (zend_function * )Z_OBJ_P (function_name_ptr );
2430+ fbc -> common .prototype = (zend_function * )Z_OBJ_P (free_op2 );
24322431 } else if (OP2_TYPE == IS_CV ) {
24332432 FREE_OP2 ();
24342433 }
@@ -4327,8 +4326,8 @@ ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
43274326 }
43284327 if (OP1_TYPE != IS_UNUSED ) {
43294328 ZVAL_DEREF (container );
4330- SEPARATE_ZVAL_NOREF (container );
43314329 }
4330+ SEPARATE_ZVAL_NOREF (container );
43324331 offset = GET_OP2_ZVAL_PTR (BP_VAR_R );
43334332
43344333 if (OP1_TYPE != IS_UNUSED && EXPECTED (Z_TYPE_P (container ) == IS_ARRAY )) {
@@ -4411,7 +4410,9 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
44114410 }
44124411 offset = GET_OP2_ZVAL_PTR (BP_VAR_R );
44134412
4414- ZVAL_DEREF (container );
4413+ if (OP1_TYPE != IS_UNUSED ) {
4414+ ZVAL_DEREF (container );
4415+ }
44154416 if (OP1_TYPE == IS_UNUSED || Z_TYPE_P (container ) == IS_OBJECT ) {
44164417 if (Z_OBJ_HT_P (container )-> unset_property ) {
44174418 Z_OBJ_HT_P (container )-> unset_property (container , offset , ((OP2_TYPE == IS_CONST ) ? (EX (run_time_cache ) + Z_CACHE_SLOT_P (offset )) : NULL ) TSRMLS_CC );
0 commit comments