Skip to content

Commit 04b1721

Browse files
committed
Merge branch 'PHP-7.4'
* PHP-7.4: Fix bug #79599 in a different way Revert "Fixed bug #97599 (coredump in set_error_handler)"
2 parents fc76509 + 5795dfd commit 04b1721

File tree

3 files changed

+28
-34
lines changed

3 files changed

+28
-34
lines changed

Zend/tests/bug79599.phpt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
--TEST--
2+
Bug #79599 (coredump in set_error_handler)
3+
--FILE--
4+
<?php
5+
set_error_handler(function($code, $message){
6+
throw new \Exception($message);
7+
});
8+
function test1(){
9+
$a[] = $b;
10+
}
11+
function test2(){
12+
$a[$c] = $b;
13+
}
14+
try{
15+
test1();
16+
}catch(\Exception $e){
17+
var_dump($e->getMessage());
18+
}
19+
try{
20+
test2();
21+
}catch(\Exception $e){
22+
var_dump($e->getMessage());
23+
}
24+
?>
25+
--EXPECT--
26+
string(21) "Undefined variable $b"
27+
string(21) "Undefined variable $c"

Zend/zend_vm_def.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2523,7 +2523,6 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
25232523
}
25242524
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
25252525
if (UNEXPECTED(variable_ptr == NULL)) {
2526-
FREE_OP_DATA();
25272526
zend_cannot_add_element();
25282527
ZEND_VM_C_GOTO(assign_dim_error);
25292528
} else if (OP_DATA_TYPE == IS_CV) {
@@ -2602,7 +2601,7 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
26022601
zend_use_scalar_as_array();
26032602
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
26042603
ZEND_VM_C_LABEL(assign_dim_error):
2605-
FREE_UNFETCHED_OP_DATA();
2604+
FREE_OP_DATA();
26062605
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26072606
ZVAL_NULL(EX_VAR(opline->result.var));
26082607
}

Zend/zend_vm_execute.h

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22060,7 +22060,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D
2206022060
}
2206122061
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2206222062
if (UNEXPECTED(variable_ptr == NULL)) {
22063-
2206422063
zend_cannot_add_element();
2206522064
goto assign_dim_error;
2206622065
} else if (IS_CONST == IS_CV) {
@@ -22173,7 +22172,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D
2217322172
}
2217422173
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2217522174
if (UNEXPECTED(variable_ptr == NULL)) {
22176-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
2217722175
zend_cannot_add_element();
2217822176
goto assign_dim_error;
2217922177
} else if (IS_TMP_VAR == IS_CV) {
@@ -22287,7 +22285,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D
2228722285
}
2228822286
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2228922287
if (UNEXPECTED(variable_ptr == NULL)) {
22290-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
2229122288
zend_cannot_add_element();
2229222289
goto assign_dim_error;
2229322290
} else if (IS_VAR == IS_CV) {
@@ -22401,7 +22398,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D
2240122398
}
2240222399
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2240322400
if (UNEXPECTED(variable_ptr == NULL)) {
22404-
2240522401
zend_cannot_add_element();
2240622402
goto assign_dim_error;
2240722403
} else if (IS_CV == IS_CV) {
@@ -24326,7 +24322,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_
2432624322
}
2432724323
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2432824324
if (UNEXPECTED(variable_ptr == NULL)) {
24329-
2433024325
zend_cannot_add_element();
2433124326
goto assign_dim_error;
2433224327
} else if (IS_CONST == IS_CV) {
@@ -24439,7 +24434,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_
2443924434
}
2444024435
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2444124436
if (UNEXPECTED(variable_ptr == NULL)) {
24442-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
2444324437
zend_cannot_add_element();
2444424438
goto assign_dim_error;
2444524439
} else if (IS_TMP_VAR == IS_CV) {
@@ -24553,7 +24547,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_
2455324547
}
2455424548
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2455524549
if (UNEXPECTED(variable_ptr == NULL)) {
24556-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
2455724550
zend_cannot_add_element();
2455824551
goto assign_dim_error;
2455924552
} else if (IS_VAR == IS_CV) {
@@ -24667,7 +24660,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_
2466724660
}
2466824661
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2466924662
if (UNEXPECTED(variable_ptr == NULL)) {
24670-
2467124663
zend_cannot_add_element();
2467224664
goto assign_dim_error;
2467324665
} else if (IS_CV == IS_CV) {
@@ -25670,7 +25662,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_
2567025662
}
2567125663
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2567225664
if (UNEXPECTED(variable_ptr == NULL)) {
25673-
2567425665
zend_cannot_add_element();
2567525666
goto assign_dim_error;
2567625667
} else if (IS_CONST == IS_CV) {
@@ -25783,7 +25774,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_
2578325774
}
2578425775
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2578525776
if (UNEXPECTED(variable_ptr == NULL)) {
25786-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
2578725777
zend_cannot_add_element();
2578825778
goto assign_dim_error;
2578925779
} else if (IS_TMP_VAR == IS_CV) {
@@ -25897,7 +25887,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_
2589725887
}
2589825888
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2589925889
if (UNEXPECTED(variable_ptr == NULL)) {
25900-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
2590125890
zend_cannot_add_element();
2590225891
goto assign_dim_error;
2590325892
} else if (IS_VAR == IS_CV) {
@@ -26011,7 +26000,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_
2601126000
}
2601226001
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2601326002
if (UNEXPECTED(variable_ptr == NULL)) {
26014-
2601526003
zend_cannot_add_element();
2601626004
goto assign_dim_error;
2601726005
} else if (IS_CV == IS_CV) {
@@ -27771,7 +27759,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA
2777127759
}
2777227760
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2777327761
if (UNEXPECTED(variable_ptr == NULL)) {
27774-
2777527762
zend_cannot_add_element();
2777627763
goto assign_dim_error;
2777727764
} else if (IS_CONST == IS_CV) {
@@ -27884,7 +27871,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA
2788427871
}
2788527872
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2788627873
if (UNEXPECTED(variable_ptr == NULL)) {
27887-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
2788827874
zend_cannot_add_element();
2788927875
goto assign_dim_error;
2789027876
} else if (IS_TMP_VAR == IS_CV) {
@@ -27998,7 +27984,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA
2799827984
}
2799927985
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2800027986
if (UNEXPECTED(variable_ptr == NULL)) {
28001-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
2800227987
zend_cannot_add_element();
2800327988
goto assign_dim_error;
2800427989
} else if (IS_VAR == IS_CV) {
@@ -28112,7 +28097,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA
2811228097
}
2811328098
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
2811428099
if (UNEXPECTED(variable_ptr == NULL)) {
28115-
2811628100
zend_cannot_add_element();
2811728101
goto assign_dim_error;
2811828102
} else if (IS_CV == IS_CV) {
@@ -38826,7 +38810,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA
3882638810
}
3882738811
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
3882838812
if (UNEXPECTED(variable_ptr == NULL)) {
38829-
3883038813
zend_cannot_add_element();
3883138814
goto assign_dim_error;
3883238815
} else if (IS_CONST == IS_CV) {
@@ -38939,7 +38922,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA
3893938922
}
3894038923
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
3894138924
if (UNEXPECTED(variable_ptr == NULL)) {
38942-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
3894338925
zend_cannot_add_element();
3894438926
goto assign_dim_error;
3894538927
} else if (IS_TMP_VAR == IS_CV) {
@@ -39053,7 +39035,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA
3905339035
}
3905439036
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
3905539037
if (UNEXPECTED(variable_ptr == NULL)) {
39056-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
3905739038
zend_cannot_add_element();
3905839039
goto assign_dim_error;
3905939040
} else if (IS_VAR == IS_CV) {
@@ -39167,7 +39148,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA
3916739148
}
3916839149
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
3916939150
if (UNEXPECTED(variable_ptr == NULL)) {
39170-
3917139151
zend_cannot_add_element();
3917239152
goto assign_dim_error;
3917339153
} else if (IS_CV == IS_CV) {
@@ -42302,7 +42282,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D
4230242282
}
4230342283
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4230442284
if (UNEXPECTED(variable_ptr == NULL)) {
42305-
4230642285
zend_cannot_add_element();
4230742286
goto assign_dim_error;
4230842287
} else if (IS_CONST == IS_CV) {
@@ -42415,7 +42394,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D
4241542394
}
4241642395
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4241742396
if (UNEXPECTED(variable_ptr == NULL)) {
42418-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
4241942397
zend_cannot_add_element();
4242042398
goto assign_dim_error;
4242142399
} else if (IS_TMP_VAR == IS_CV) {
@@ -42529,7 +42507,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D
4252942507
}
4253042508
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4253142509
if (UNEXPECTED(variable_ptr == NULL)) {
42532-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
4253342510
zend_cannot_add_element();
4253442511
goto assign_dim_error;
4253542512
} else if (IS_VAR == IS_CV) {
@@ -42643,7 +42620,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D
4264342620
}
4264442621
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4264542622
if (UNEXPECTED(variable_ptr == NULL)) {
42646-
4264742623
zend_cannot_add_element();
4264842624
goto assign_dim_error;
4264942625
} else if (IS_CV == IS_CV) {
@@ -44105,7 +44081,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D
4410544081
}
4410644082
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4410744083
if (UNEXPECTED(variable_ptr == NULL)) {
44108-
4410944084
zend_cannot_add_element();
4411044085
goto assign_dim_error;
4411144086
} else if (IS_CONST == IS_CV) {
@@ -44218,7 +44193,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D
4421844193
}
4421944194
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4422044195
if (UNEXPECTED(variable_ptr == NULL)) {
44221-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
4422244196
zend_cannot_add_element();
4422344197
goto assign_dim_error;
4422444198
} else if (IS_TMP_VAR == IS_CV) {
@@ -44332,7 +44306,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D
4433244306
}
4433344307
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4433444308
if (UNEXPECTED(variable_ptr == NULL)) {
44335-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
4433644309
zend_cannot_add_element();
4433744310
goto assign_dim_error;
4433844311
} else if (IS_VAR == IS_CV) {
@@ -44446,7 +44419,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D
4444644419
}
4444744420
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4444844421
if (UNEXPECTED(variable_ptr == NULL)) {
44449-
4445044422
zend_cannot_add_element();
4445144423
goto assign_dim_error;
4445244424
} else if (IS_CV == IS_CV) {
@@ -47108,7 +47080,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_
4710847080
}
4710947081
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4711047082
if (UNEXPECTED(variable_ptr == NULL)) {
47111-
4711247083
zend_cannot_add_element();
4711347084
goto assign_dim_error;
4711447085
} else if (IS_CONST == IS_CV) {
@@ -47221,7 +47192,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_
4722147192
}
4722247193
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4722347194
if (UNEXPECTED(variable_ptr == NULL)) {
47224-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
4722547195
zend_cannot_add_element();
4722647196
goto assign_dim_error;
4722747197
} else if (IS_TMP_VAR == IS_CV) {
@@ -47335,7 +47305,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_
4733547305
}
4733647306
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4733747307
if (UNEXPECTED(variable_ptr == NULL)) {
47338-
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
4733947308
zend_cannot_add_element();
4734047309
goto assign_dim_error;
4734147310
} else if (IS_VAR == IS_CV) {
@@ -47449,7 +47418,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_
4744947418
}
4745047419
variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
4745147420
if (UNEXPECTED(variable_ptr == NULL)) {
47452-
4745347421
zend_cannot_add_element();
4745447422
goto assign_dim_error;
4745547423
} else if (IS_CV == IS_CV) {

0 commit comments

Comments
 (0)