Skip to content

Commit b5e9bf7

Browse files
nielsdoscmb69
authored andcommitted
Fix incorrect check condition in ZEND_YIELD
The condition `UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE` always returned false, because `UNEXPECTED(expression)` always returns 0 or 1. Move the parens so the comparison is executed properly. Closes GH-10332.
1 parent c47a1a2 commit b5e9bf7

File tree

3 files changed

+23
-21
lines changed

3 files changed

+23
-21
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 8.1.16
44

5+
- Core:
6+
. Fixed incorrect check condition in ZEND_YIELD. (nielsdos)
57

68
02 Feb 2023, PHP 8.1.15
79

Zend/zend_vm_def.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8119,7 +8119,7 @@ ZEND_VM_HANDLER(160, ZEND_YIELD, CONST|TMP|VAR|CV|UNUSED, CONST|TMPVAR|CV|UNUSED
81198119
/* Set the new yielded key */
81208120
if (OP2_TYPE != IS_UNUSED) {
81218121
zval *key = GET_OP2_ZVAL_PTR(BP_VAR_R);
8122-
if ((OP2_TYPE & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
8122+
if ((OP2_TYPE & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
81238123
key = Z_REFVAL_P(key);
81248124
}
81258125
ZVAL_COPY(&generator->key, key);

Zend/zend_vm_execute.h

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7526,7 +7526,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER
75267526
/* Set the new yielded key */
75277527
if (IS_CONST != IS_UNUSED) {
75287528
zval *key = RT_CONSTANT(opline, opline->op2);
7529-
if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
7529+
if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
75307530
key = Z_REFVAL_P(key);
75317531
}
75327532
ZVAL_COPY(&generator->key, key);
@@ -9665,7 +9665,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLE
96659665
/* Set the new yielded key */
96669666
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
96679667
zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9668-
if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
9668+
if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
96699669
key = Z_REFVAL_P(key);
96709670
}
96719671
ZVAL_COPY(&generator->key, key);
@@ -10508,7 +10508,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLE
1050810508
/* Set the new yielded key */
1050910509
if (IS_UNUSED != IS_UNUSED) {
1051010510
zval *key = NULL;
10511-
if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
10511+
if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
1051210512
key = Z_REFVAL_P(key);
1051310513
}
1051410514
ZVAL_COPY(&generator->key, key);
@@ -12020,7 +12020,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZE
1202012020
/* Set the new yielded key */
1202112021
if (IS_CV != IS_UNUSED) {
1202212022
zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
12023-
if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
12023+
if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
1202412024
key = Z_REFVAL_P(key);
1202512025
}
1202612026
ZVAL_COPY(&generator->key, key);
@@ -19834,7 +19834,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(Z
1983419834
/* Set the new yielded key */
1983519835
if (IS_CONST != IS_UNUSED) {
1983619836
zval *key = RT_CONSTANT(opline, opline->op2);
19837-
if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
19837+
if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
1983819838
key = Z_REFVAL_P(key);
1983919839
}
1984019840
ZVAL_COPY(&generator->key, key);
@@ -20273,7 +20273,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(
2027320273
/* Set the new yielded key */
2027420274
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
2027520275
zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20276-
if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
20276+
if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
2027720277
key = Z_REFVAL_P(key);
2027820278
}
2027920279
ZVAL_COPY(&generator->key, key);
@@ -20733,7 +20733,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(
2073320733
/* Set the new yielded key */
2073420734
if (IS_UNUSED != IS_UNUSED) {
2073520735
zval *key = NULL;
20736-
if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
20736+
if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
2073720737
key = Z_REFVAL_P(key);
2073820738
}
2073920739
ZVAL_COPY(&generator->key, key);
@@ -21132,7 +21132,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND
2113221132
/* Set the new yielded key */
2113321133
if (IS_CV != IS_UNUSED) {
2113421134
zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
21135-
if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
21135+
if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
2113621136
key = Z_REFVAL_P(key);
2113721137
}
2113821138
ZVAL_COPY(&generator->key, key);
@@ -24957,7 +24957,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(Z
2495724957
/* Set the new yielded key */
2495824958
if (IS_CONST != IS_UNUSED) {
2495924959
zval *key = RT_CONSTANT(opline, opline->op2);
24960-
if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
24960+
if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
2496124961
key = Z_REFVAL_P(key);
2496224962
}
2496324963
ZVAL_COPY(&generator->key, key);
@@ -27255,7 +27255,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(
2725527255
/* Set the new yielded key */
2725627256
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
2725727257
zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27258-
if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
27258+
if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
2725927259
key = Z_REFVAL_P(key);
2726027260
}
2726127261
ZVAL_COPY(&generator->key, key);
@@ -29154,7 +29154,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(
2915429154
/* Set the new yielded key */
2915529155
if (IS_UNUSED != IS_UNUSED) {
2915629156
zval *key = NULL;
29157-
if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
29157+
if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
2915829158
key = Z_REFVAL_P(key);
2915929159
}
2916029160
ZVAL_COPY(&generator->key, key);
@@ -31533,7 +31533,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND
3153331533
/* Set the new yielded key */
3153431534
if (IS_CV != IS_UNUSED) {
3153531535
zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31536-
if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
31536+
if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
3153731537
key = Z_REFVAL_P(key);
3153831538
}
3153931539
ZVAL_COPY(&generator->key, key);
@@ -33604,7 +33604,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLE
3360433604
/* Set the new yielded key */
3360533605
if (IS_CONST != IS_UNUSED) {
3360633606
zval *key = RT_CONSTANT(opline, opline->op2);
33607-
if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
33607+
if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
3360833608
key = Z_REFVAL_P(key);
3360933609
}
3361033610
ZVAL_COPY(&generator->key, key);
@@ -35341,7 +35341,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDL
3534135341
/* Set the new yielded key */
3534235342
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
3534335343
zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35344-
if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
35344+
if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
3534535345
key = Z_REFVAL_P(key);
3534635346
}
3534735347
ZVAL_COPY(&generator->key, key);
@@ -35883,7 +35883,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDL
3588335883
/* Set the new yielded key */
3588435884
if (IS_UNUSED != IS_UNUSED) {
3588535885
zval *key = NULL;
35886-
if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
35886+
if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
3588735887
key = Z_REFVAL_P(key);
3588835888
}
3588935889
ZVAL_COPY(&generator->key, key);
@@ -37809,7 +37809,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(Z
3780937809
/* Set the new yielded key */
3781037810
if (IS_CV != IS_UNUSED) {
3781137811
zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37812-
if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
37812+
if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
3781337813
key = Z_REFVAL_P(key);
3781437814
}
3781537815
ZVAL_COPY(&generator->key, key);
@@ -43038,7 +43038,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZE
4303843038
/* Set the new yielded key */
4303943039
if (IS_CONST != IS_UNUSED) {
4304043040
zval *key = RT_CONSTANT(opline, opline->op2);
43041-
if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
43041+
if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
4304243042
key = Z_REFVAL_P(key);
4304343043
}
4304443044
ZVAL_COPY(&generator->key, key);
@@ -46593,7 +46593,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(Z
4659346593
/* Set the new yielded key */
4659446594
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
4659546595
zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46596-
if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
46596+
if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
4659746597
key = Z_REFVAL_P(key);
4659846598
}
4659946599
ZVAL_COPY(&generator->key, key);
@@ -48392,7 +48392,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(Z
4839248392
/* Set the new yielded key */
4839348393
if (IS_UNUSED != IS_UNUSED) {
4839448394
zval *key = NULL;
48395-
if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
48395+
if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
4839648396
key = Z_REFVAL_P(key);
4839748397
}
4839848398
ZVAL_COPY(&generator->key, key);
@@ -51978,7 +51978,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_
5197851978
/* Set the new yielded key */
5197951979
if (IS_CV != IS_UNUSED) {
5198051980
zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51981-
if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key)) == IS_REFERENCE) {
51981+
if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
5198251982
key = Z_REFVAL_P(key);
5198351983
}
5198451984
ZVAL_COPY(&generator->key, key);

0 commit comments

Comments
 (0)