Skip to content

Commit 773d80c

Browse files
committed
Fixed support for references
1 parent e7ffdb2 commit 773d80c

File tree

2 files changed

+26
-13
lines changed

2 files changed

+26
-13
lines changed

Zend/zend_vm_def.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4924,7 +4924,8 @@ ZEND_VM_C_LABEL(num_index_prop):
49244924

49254925
if (opline->extended_value & ZEND_ISSET) {
49264926
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
4927-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
4927+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
4928+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
49284929
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
49294930
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
49304931
}

Zend/zend_vm_execute.h

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16724,7 +16724,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CONST_HANDLER(ZEND
1672416724

1672516725
if (opline->extended_value & ZEND_ISSET) {
1672616726
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
16727-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
16727+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
16728+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
1672816729
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
1672916730
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
1673016731
}
@@ -18710,7 +18711,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_O
1871018711

1871118712
if (opline->extended_value & ZEND_ISSET) {
1871218713
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
18713-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
18714+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
18715+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
1871418716
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
1871518717
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
1871618718
}
@@ -21067,7 +21069,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_O
2106721069

2106821070
if (opline->extended_value & ZEND_ISSET) {
2106921071
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
21070-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
21072+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
21073+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
2107121074
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
2107221075
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
2107321076
}
@@ -24297,7 +24300,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OP
2429724300

2429824301
if (opline->extended_value & ZEND_ISSET) {
2429924302
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
24300-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
24303+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
24304+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
2430124305
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
2430224306
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
2430324307
}
@@ -25757,7 +25761,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER(Z
2575725761

2575825762
if (opline->extended_value & ZEND_ISSET) {
2575925763
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
25760-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
25764+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
25765+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
2576125766
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
2576225767
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
2576325768
}
@@ -27036,7 +27041,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEN
2703627041

2703727042
if (opline->extended_value & ZEND_ISSET) {
2703827043
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
27039-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
27044+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
27045+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
2704027046
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
2704127047
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
2704227048
}
@@ -28317,7 +28323,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEN
2831728323

2831828324
if (opline->extended_value & ZEND_ISSET) {
2831928325
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
28320-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
28326+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
28327+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
2832128328
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
2832228329
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
2832328330
}
@@ -30107,7 +30114,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND
3010730114

3010830115
if (opline->extended_value & ZEND_ISSET) {
3010930116
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
30110-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
30117+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
30118+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
3011130119
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
3011230120
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
3011330121
}
@@ -33709,7 +33717,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_
3370933717

3371033718
if (opline->extended_value & ZEND_ISSET) {
3371133719
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
33712-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
33720+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
33721+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
3371333722
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
3371433723
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
3371533724
}
@@ -35606,7 +35615,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OP
3560635615

3560735616
if (opline->extended_value & ZEND_ISSET) {
3560835617
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
35609-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
35618+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
35619+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
3561035620
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
3561135621
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
3561235622
}
@@ -37843,7 +37853,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OP
3784337853

3784437854
if (opline->extended_value & ZEND_ISSET) {
3784537855
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
37846-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
37856+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
37857+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
3784737858
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
3784837859
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
3784937860
}
@@ -40817,7 +40828,8 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPC
4081740828

4081840829
if (opline->extended_value & ZEND_ISSET) {
4081940830
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
40820-
result = (value != NULL && Z_TYPE_P(value) > IS_NULL);
40831+
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
40832+
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
4082140833
} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
4082240834
result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
4082340835
}

0 commit comments

Comments
 (0)