@@ -3836,6 +3836,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
3836
3836
3837
3837
if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
3838
3838
array_ref = array_ptr = NULL;
3839
+ if (IS_CONST == IS_VAR && UNEXPECTED(array_ref == NULL)) {
3840
+ zend_throw_error(NULL, "Cannot iterate on string offsets by reference");
3841
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
3842
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3843
+ HANDLE_EXCEPTION();
3844
+ }
3839
3845
if (Z_ISREF_P(array_ref)) {
3840
3846
array_ptr = Z_REFVAL_P(array_ref);
3841
3847
}
@@ -12331,6 +12337,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
12331
12337
12332
12338
if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
12333
12339
array_ref = array_ptr = NULL;
12340
+ if (IS_TMP_VAR == IS_VAR && UNEXPECTED(array_ref == NULL)) {
12341
+ zend_throw_error(NULL, "Cannot iterate on string offsets by reference");
12342
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
12343
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12344
+ HANDLE_EXCEPTION();
12345
+ }
12334
12346
if (Z_ISREF_P(array_ref)) {
12335
12347
array_ptr = Z_REFVAL_P(array_ref);
12336
12348
}
@@ -15799,6 +15811,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
15799
15811
15800
15812
if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
15801
15813
array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15814
+ if (IS_VAR == IS_VAR && UNEXPECTED(array_ref == NULL)) {
15815
+ zend_throw_error(NULL, "Cannot iterate on string offsets by reference");
15816
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
15817
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
15818
+ HANDLE_EXCEPTION();
15819
+ }
15802
15820
if (Z_ISREF_P(array_ref)) {
15803
15821
array_ptr = Z_REFVAL_P(array_ref);
15804
15822
}
@@ -29641,6 +29659,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
29641
29659
29642
29660
if (IS_CV == IS_VAR || IS_CV == IS_CV) {
29643
29661
array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
29662
+ if (IS_CV == IS_VAR && UNEXPECTED(array_ref == NULL)) {
29663
+ zend_throw_error(NULL, "Cannot iterate on string offsets by reference");
29664
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
29665
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
29666
+ HANDLE_EXCEPTION();
29667
+ }
29644
29668
if (Z_ISREF_P(array_ref)) {
29645
29669
array_ptr = Z_REFVAL_P(array_ref);
29646
29670
}
0 commit comments