@@ -10268,7 +10268,6 @@ ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, ((op->op1_type == IS_CONST) ? !Z_R
1026810268ZEND_VM_HOT_TYPE_SPEC_HANDLER (ZEND_FETCH_DIM_R , (op -> op1_type != IS_CONST && op -> op2_type == IS_CONST && !(op2_info & (MAY_BE_ANY - MAY_BE_STRING - MAY_BE_LONG ))), ZEND_FETCH_DIM_R_CACHED_INDEX , TMPVAR |CV , CONST , CACHE_SLOT )
1026910269{
1027010270 USE_OPLINE
10271- SAVE_OPLINE ();
1027210271
1027310272 zval * container = GET_OP1_ZVAL_PTR_UNDEF (BP_VAR_R );
1027410273 zval * dim = GET_OP2_ZVAL_PTR_UNDEF (BP_VAR_R );
@@ -10282,15 +10281,22 @@ ZEND_VM_C_LABEL(fetch_dim_r_const_index_array):
1028210281 zval * value = & ht -> arPacked [offset ];
1028310282 if (EXPECTED (Z_TYPE_P (value ) != IS_UNDEF )) {
1028410283 ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), value );
10285- FREE_OP1 ();
10286- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ();
10284+ if (OP1_TYPE & (IS_TMP_VAR |IS_VAR )) {
10285+ SAVE_OPLINE ();
10286+ FREE_OP1 ();
10287+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ();
10288+ } else {
10289+ ZEND_VM_NEXT_OPCODE ();
10290+ }
1028710291 }
1028810292 }
10293+ SAVE_OPLINE ();
1028910294 zend_undefined_offset (offset );
1029010295 ZEND_VM_C_GOTO (fetch_dim_r_cached_index_undef );
1029110296 }
1029210297 } else {
10293- if (HT_IS_PACKED (ht )) {
10298+ if (UNEXPECTED (HT_IS_PACKED (ht ))) {
10299+ SAVE_OPLINE ();
1029410300 zend_undefined_index (Z_STR_P (dim ));
1029510301 ZEND_VM_C_GOTO (fetch_dim_r_cached_index_undef );
1029610302 }
@@ -10301,11 +10307,16 @@ ZEND_VM_C_LABEL(fetch_dim_r_const_index_array):
1030110307 Bucket * b = & ht -> arData [cached_offset - 1 ];
1030210308 if (!b -> key ? (Z_TYPE_P (dim ) == IS_LONG && b -> h == Z_LVAL_P (dim )) : (Z_TYPE_P (dim ) == IS_STRING && zend_string_equals (b -> key , Z_STR_P (dim )))) {
1030310309 ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), & b -> val );
10304- FREE_OP1 ();
10305- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ();
10310+ if (OP1_TYPE & (IS_TMP_VAR |IS_VAR )) {
10311+ FREE_OP1 ();
10312+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ();
10313+ } else {
10314+ ZEND_VM_NEXT_OPCODE ();
10315+ }
1030610316 }
1030710317 }
1030810318
10319+ SAVE_OPLINE ();
1030910320 zend_fetch_dimension_address_read_R_ex (container , dim , OP2_TYPE , CACHE_ADDR (opline -> extended_value ) OPLINE_CC EXECUTE_DATA_CC );
1031010321 FREE_OP1 ();
1031110322 ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ();
0 commit comments