@@ -789,14 +789,14 @@ ZEND_VM_HELPER(zend_binary_assign_op_dim_helper, VAR|UNUSED|CV, CONST|TMPVAR|UNU
789789
790790zend_fetch_dimension_address_RW (& rv , container , dim , OP2_TYPE );
791791value = get_zval_ptr_r ((opline + 1 )-> op1_type , (opline + 1 )-> op1 , execute_data , & free_op_data1 );
792- ZEND_ASSERT (Z_TYPE (rv ) == IS_INDIRECT );
793- var_ptr = Z_INDIRECT (rv );
794792
795- if (UNEXPECTED (var_ptr == & EG ( error_zval ) )) {
793+ if (UNEXPECTED (Z_TYPE ( rv ) == IS_ERROR )) {
796794if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
797795ZVAL_NULL (EX_VAR (opline -> result .var ));
798796}
799797} else {
798+ ZEND_ASSERT (Z_TYPE (rv ) == IS_INDIRECT );
799+ var_ptr = Z_INDIRECT (rv );
800800ZVAL_DEREF (var_ptr );
801801SEPARATE_ZVAL_NOREF (var_ptr );
802802
@@ -825,7 +825,7 @@ ZEND_VM_HELPER(zend_binary_assign_op_helper, VAR|CV, CONST|TMPVAR|CV, binary_op_
825825value = GET_OP2_ZVAL_PTR (BP_VAR_R );
826826var_ptr = GET_OP1_ZVAL_PTR_PTR (BP_VAR_RW );
827827
828- if (OP1_TYPE == IS_VAR && UNEXPECTED (var_ptr == & EG ( error_zval ) )) {
828+ if (OP1_TYPE == IS_VAR && UNEXPECTED (Z_TYPE_P ( var_ptr ) == IS_ERROR )) {
829829if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
830830ZVAL_NULL (EX_VAR (opline -> result .var ));
831831}
@@ -1247,7 +1247,7 @@ ZEND_VM_HANDLER(34, ZEND_PRE_INC, VAR|CV, ANY)
12471247ZEND_VM_NEXT_OPCODE ();
12481248}
12491249
1250- if (OP1_TYPE == IS_VAR && UNEXPECTED (var_ptr == & EG ( error_zval ) )) {
1250+ if (OP1_TYPE == IS_VAR && UNEXPECTED (Z_TYPE_P ( var_ptr ) == IS_ERROR )) {
12511251if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
12521252ZVAL_NULL (EX_VAR (opline -> result .var ));
12531253}
@@ -1287,7 +1287,7 @@ ZEND_VM_HANDLER(35, ZEND_PRE_DEC, VAR|CV, ANY)
12871287ZEND_VM_NEXT_OPCODE ();
12881288}
12891289
1290- if (OP1_TYPE == IS_VAR && UNEXPECTED (var_ptr == & EG ( error_zval ) )) {
1290+ if (OP1_TYPE == IS_VAR && UNEXPECTED (Z_TYPE_P ( var_ptr ) == IS_ERROR )) {
12911291if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
12921292ZVAL_NULL (EX_VAR (opline -> result .var ));
12931293}
@@ -1325,7 +1325,7 @@ ZEND_VM_HANDLER(36, ZEND_POST_INC, VAR|CV, ANY)
13251325ZEND_VM_NEXT_OPCODE ();
13261326}
13271327
1328- if (OP1_TYPE == IS_VAR && UNEXPECTED (var_ptr == & EG ( error_zval ) )) {
1328+ if (OP1_TYPE == IS_VAR && UNEXPECTED (Z_TYPE_P ( var_ptr ) == IS_ERROR )) {
13291329ZVAL_NULL (EX_VAR (opline -> result .var ));
13301330ZEND_VM_NEXT_OPCODE ();
13311331}
@@ -1358,7 +1358,7 @@ ZEND_VM_HANDLER(37, ZEND_POST_DEC, VAR|CV, ANY)
13581358ZEND_VM_NEXT_OPCODE ();
13591359}
13601360
1361- if (OP1_TYPE == IS_VAR && UNEXPECTED (var_ptr == & EG ( error_zval ) )) {
1361+ if (OP1_TYPE == IS_VAR && UNEXPECTED (Z_TYPE_P ( var_ptr ) == IS_ERROR )) {
13621362ZVAL_NULL (EX_VAR (opline -> result .var ));
13631363ZEND_VM_NEXT_OPCODE ();
13641364}
@@ -2139,7 +2139,7 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
21392139variable_ptr = zend_hash_next_index_insert (Z_ARRVAL_P (object_ptr ), & EG (uninitialized_zval ));
21402140if (UNEXPECTED (variable_ptr == NULL )) {
21412141zend_error (E_WARNING , "Cannot add element to the array as the next element is already occupied" );
2142- variable_ptr = & EG ( error_zval ) ;
2142+ variable_ptr = NULL ;
21432143}
21442144} else {
21452145dim = GET_OP2_ZVAL_PTR (BP_VAR_R );
@@ -2148,7 +2148,7 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
21482148FREE_OP2 ();
21492149}
21502150value = get_zval_ptr_r ((opline + 1 )-> op1_type , (opline + 1 )-> op1 , execute_data , & free_op_data1 );
2151- if (UNEXPECTED (variable_ptr == & EG ( error_zval ) )) {
2151+ if (UNEXPECTED (variable_ptr == NULL )) {
21522152FREE_OP (free_op_data1 );
21532153if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
21542154ZVAL_NULL (EX_VAR (opline -> result .var ));
@@ -2197,10 +2197,9 @@ ZEND_VM_C_LABEL(assign_dim_convert_to_array):
21972197ZEND_VM_C_GOTO (try_assign_dim_array );
21982198}
21992199} else if (EXPECTED (Z_TYPE_P (object_ptr ) <= IS_FALSE )) {
2200- if (OP1_TYPE == IS_VAR && UNEXPECTED (object_ptr == & EG (error_zval ))) {
2201- ZEND_VM_C_GOTO (assign_dim_clean );
2202- }
22032200ZEND_VM_C_GOTO (assign_dim_convert_to_array );
2201+ } else if (OP1_TYPE == IS_VAR && UNEXPECTED (Z_TYPE_P (object_ptr ) == IS_ERROR )) {
2202+ ZEND_VM_C_GOTO (assign_dim_clean );
22042203} else {
22052204zend_error (E_WARNING , "Cannot use a scalar value as an array" );
22062205ZEND_VM_C_LABEL (assign_dim_clean ):
@@ -2229,7 +2228,7 @@ ZEND_VM_HANDLER(38, ZEND_ASSIGN, VAR|CV, CONST|TMP|VAR|CV)
22292228value = GET_OP2_ZVAL_PTR (BP_VAR_R );
22302229variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF (BP_VAR_W );
22312230
2232- if (OP1_TYPE == IS_VAR && UNEXPECTED (variable_ptr == & EG ( error_zval ) )) {
2231+ if (OP1_TYPE == IS_VAR && UNEXPECTED (Z_TYPE_P ( variable_ptr ) == IS_ERROR )) {
22332232FREE_OP2 ();
22342233if (UNEXPECTED (RETURN_VALUE_USED (opline ))) {
22352234ZVAL_NULL (EX_VAR (opline -> result .var ));
@@ -2258,7 +2257,8 @@ ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC)
22582257
22592258if (OP1_TYPE == IS_VAR &&
22602259 UNEXPECTED (Z_TYPE_P (EX_VAR (opline -> op1 .var )) != IS_INDIRECT ) &&
2261- UNEXPECTED (!Z_ISREF_P (EX_VAR (opline -> op1 .var )))) {
2260+ UNEXPECTED (Z_TYPE_P (EX_VAR (opline -> op1 .var )) != IS_REFERENCE ) &&
2261+ UNEXPECTED (Z_TYPE_P (EX_VAR (opline -> op1 .var )) != IS_ERROR )) {
22622262zend_throw_error (NULL , "Cannot assign by reference to overloaded object" );
22632263FREE_OP2_VAR_PTR ();
22642264HANDLE_EXCEPTION ();
@@ -2279,8 +2279,8 @@ ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC)
22792279}
22802280
22812281variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF (BP_VAR_W );
2282- if ((OP1_TYPE == IS_VAR && UNEXPECTED (variable_ptr == & EG ( error_zval ) )) ||
2283- (OP2_TYPE == IS_VAR && UNEXPECTED (value_ptr == & EG ( error_zval ) ))) {
2282+ if ((OP1_TYPE == IS_VAR && UNEXPECTED (Z_TYPE_P ( variable_ptr ) == IS_ERROR )) ||
2283+ (OP2_TYPE == IS_VAR && UNEXPECTED (Z_TYPE_P ( value_ptr ) == IS_ERROR ))) {
22842284variable_ptr = & EG (uninitialized_zval );
22852285} else {
22862286zend_assign_to_variable_reference (variable_ptr , value_ptr );
@@ -4268,7 +4268,7 @@ ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, NUM)
42684268varptr = GET_OP1_ZVAL_PTR_PTR (BP_VAR_W );
42694269
42704270arg = ZEND_CALL_VAR (EX (call ), opline -> result .var );
4271- if (OP1_TYPE == IS_VAR && UNEXPECTED (varptr == & EG ( error_zval ) )) {
4271+ if (OP1_TYPE == IS_VAR && UNEXPECTED (Z_TYPE_P ( varptr ) == IS_ERROR )) {
42724272ZVAL_NEW_REF (arg , & EG (uninitialized_zval ));
42734273ZEND_VM_NEXT_OPCODE ();
42744274}
0 commit comments