@@ -1166,19 +1166,17 @@ ZEND_VM_HANDLER(81, ZEND_FETCH_DIM_R, VAR|CV, CONST|TMP|VAR|CV)
1166
1166
{
1167
1167
USE_OPLINE
1168
1168
zend_free_op free_op1 , free_op2 ;
1169
- zval * * container ;
1169
+ zval * container ;
1170
1170
1171
1171
SAVE_OPLINE ();
1172
1172
1173
- if ((opline -> extended_value & ZEND_FETCH_ADD_LOCK ) &&
1174
- OP1_TYPE != IS_CV &&
1175
- EX_T (opline -> op1 .var ).var .ptr_ptr ) {
1176
- PZVAL_LOCK (* EX_T (opline -> op1 .var ).var .ptr_ptr );
1173
+ if (OP1_TYPE == IS_VAR && (opline -> extended_value & ZEND_FETCH_ADD_LOCK )) {
1174
+ PZVAL_LOCK (EX_T (opline -> op1 .var ).var .ptr );
1177
1175
}
1178
- container = GET_OP1_ZVAL_PTR_PTR (BP_VAR_R );
1176
+ container = GET_OP1_ZVAL_PTR (BP_VAR_R );
1179
1177
zend_fetch_dimension_address_read (& EX_T (opline -> result .var ), container , GET_OP2_ZVAL_PTR (BP_VAR_R ), OP2_TYPE , BP_VAR_R TSRMLS_CC );
1180
1178
FREE_OP2 ();
1181
- FREE_OP1_VAR_PTR ();
1179
+ FREE_OP1 ();
1182
1180
CHECK_EXCEPTION ();
1183
1181
ZEND_VM_NEXT_OPCODE ();
1184
1182
}
@@ -1243,13 +1241,13 @@ ZEND_VM_HANDLER(90, ZEND_FETCH_DIM_IS, VAR|CV, CONST|TMP|VAR|CV)
1243
1241
{
1244
1242
USE_OPLINE
1245
1243
zend_free_op free_op1 , free_op2 ;
1246
- zval * * container ;
1244
+ zval * container ;
1247
1245
1248
1246
SAVE_OPLINE ();
1249
- container = GET_OP1_ZVAL_PTR_PTR (BP_VAR_IS );
1247
+ container = GET_OP1_ZVAL_PTR (BP_VAR_IS );
1250
1248
zend_fetch_dimension_address_read (& EX_T (opline -> result .var ), container , GET_OP2_ZVAL_PTR (BP_VAR_R ), OP2_TYPE , BP_VAR_IS TSRMLS_CC );
1251
1249
FREE_OP2 ();
1252
- FREE_OP1_VAR_PTR ();
1250
+ FREE_OP1 ();
1253
1251
CHECK_EXCEPTION ();
1254
1252
ZEND_VM_NEXT_OPCODE ();
1255
1253
}
@@ -1258,28 +1256,32 @@ ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, VAR|CV, CONST|TMP|VAR|UNUSED|CV)
1258
1256
{
1259
1257
USE_OPLINE
1260
1258
zend_free_op free_op1 , free_op2 ;
1261
- zval * * container ;
1262
1259
1263
1260
SAVE_OPLINE ();
1264
1261
1265
1262
if (ARG_SHOULD_BE_SENT_BY_REF (EX (fbc ), (opline -> extended_value & ZEND_FETCH_ARG_MASK ))) {
1266
- container = GET_OP1_ZVAL_PTR_PTR (BP_VAR_W );
1263
+ zval * * container = GET_OP1_ZVAL_PTR_PTR (BP_VAR_W );
1264
+
1267
1265
if (OP1_TYPE == IS_VAR && UNEXPECTED (container == NULL )) {
1268
1266
zend_error_noreturn (E_ERROR , "Cannot use string offset as an array" );
1269
1267
}
1270
1268
zend_fetch_dimension_address (& EX_T (opline -> result .var ), container , GET_OP2_ZVAL_PTR (BP_VAR_R ), OP2_TYPE , BP_VAR_W TSRMLS_CC );
1271
1269
if (OP1_TYPE == IS_VAR && OP1_FREE && READY_TO_DESTROY (free_op1 .var )) {
1272
1270
EXTRACT_ZVAL_PTR (& EX_T (opline -> result .var ));
1273
1271
}
1272
+ FREE_OP2 ();
1273
+ FREE_OP1_VAR_PTR ();
1274
1274
} else {
1275
+ zval * container ;
1276
+
1275
1277
if (OP2_TYPE == IS_UNUSED ) {
1276
1278
zend_error_noreturn (E_ERROR , "Cannot use [] for reading" );
1277
1279
}
1278
- container = GET_OP1_ZVAL_PTR_PTR (BP_VAR_R );
1280
+ container = GET_OP1_ZVAL_PTR (BP_VAR_R );
1279
1281
zend_fetch_dimension_address_read (& EX_T (opline -> result .var ), container , GET_OP2_ZVAL_PTR (BP_VAR_R ), OP2_TYPE , BP_VAR_R TSRMLS_CC );
1282
+ FREE_OP2 ();
1283
+ FREE_OP1 ();
1280
1284
}
1281
- FREE_OP2 ();
1282
- FREE_OP1_VAR_PTR ();
1283
1285
CHECK_EXCEPTION ();
1284
1286
ZEND_VM_NEXT_OPCODE ();
1285
1287
}
0 commit comments