Skip to content

Commit 5767ed0

Browse files
committed
Add test for illegal unset/isset offset
Weirdly these warnings had zero coverage previously...
1 parent 50c4f03 commit 5767ed0

File tree

3 files changed

+27
-80
lines changed

3 files changed

+27
-80
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
--TEST--
2+
Using unset(), isset(), empty() with an illegal array offset throws
3+
--FILE--
4+
<?php
5+
6+
$ary = [];
7+
try {
8+
unset($ary[[]]);
9+
} catch (Error $e) {
10+
echo $e->getMessage(), "\n";
11+
}
12+
try {
13+
isset($ary[[]]);
14+
} catch (Error $e) {
15+
echo $e->getMessage(), "\n";
16+
}
17+
try {
18+
empty($ary[[]]);
19+
} catch (Error $e) {
20+
echo $e->getMessage(), "\n";
21+
}
22+
23+
?>
24+
--EXPECT--
25+
Illegal offset type in unset
26+
Illegal offset type in isset or empty
27+
Illegal offset type in isset or empty

Zend/zend_vm_def.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6887,14 +6887,6 @@ ZEND_VM_C_LABEL(num_index_prop):
68876887
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
68886888
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
68896889
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
6890-
6891-
if (OP1_TYPE & (IS_CONST|IS_CV)) {
6892-
/* avoid exception check */
6893-
FREE_OP2();
6894-
ZEND_VM_SMART_BRANCH(result, 0);
6895-
ZVAL_BOOL(EX_VAR(opline->result.var), result);
6896-
ZEND_VM_NEXT_OPCODE();
6897-
}
68986890
} else {
68996891
result = (value == NULL || !i_zend_is_true(value));
69006892
}

Zend/zend_vm_execute.h

Lines changed: 0 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -6205,14 +6205,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM
62056205
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
62066206
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
62076207
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
6208-
6209-
if (IS_CONST & (IS_CONST|IS_CV)) {
6210-
/* avoid exception check */
6211-
6212-
ZEND_VM_SMART_BRANCH(result, 0);
6213-
ZVAL_BOOL(EX_VAR(opline->result.var), result);
6214-
ZEND_VM_NEXT_OPCODE();
6215-
}
62166208
} else {
62176209
result = (value == NULL || !i_zend_is_true(value));
62186210
}
@@ -8381,14 +8373,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CON
83818373
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
83828374
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
83838375
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
8384-
8385-
if (IS_CONST & (IS_CONST|IS_CV)) {
8386-
/* avoid exception check */
8387-
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8388-
ZEND_VM_SMART_BRANCH(result, 0);
8389-
ZVAL_BOOL(EX_VAR(opline->result.var), result);
8390-
ZEND_VM_NEXT_OPCODE();
8391-
}
83928376
} else {
83938377
result = (value == NULL || !i_zend_is_true(value));
83948378
}
@@ -10812,14 +10796,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CON
1081210796
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
1081310797
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
1081410798
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
10815-
10816-
if (IS_CONST & (IS_CONST|IS_CV)) {
10817-
/* avoid exception check */
10818-
10819-
ZEND_VM_SMART_BRANCH(result, 0);
10820-
ZVAL_BOOL(EX_VAR(opline->result.var), result);
10821-
ZEND_VM_NEXT_OPCODE();
10822-
}
1082310799
} else {
1082410800
result = (value == NULL || !i_zend_is_true(value));
1082510801
}
@@ -14822,14 +14798,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP
1482214798
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
1482314799
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
1482414800
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
14825-
14826-
if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
14827-
/* avoid exception check */
14828-
14829-
ZEND_VM_SMART_BRANCH(result, 0);
14830-
ZVAL_BOOL(EX_VAR(opline->result.var), result);
14831-
ZEND_VM_NEXT_OPCODE();
14832-
}
1483314801
} else {
1483414802
result = (value == NULL || !i_zend_is_true(value));
1483514803
}
@@ -16255,14 +16223,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP
1625516223
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
1625616224
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
1625716225
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
16258-
16259-
if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
16260-
/* avoid exception check */
16261-
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16262-
ZEND_VM_SMART_BRANCH(result, 0);
16263-
ZVAL_BOOL(EX_VAR(opline->result.var), result);
16264-
ZEND_VM_NEXT_OPCODE();
16265-
}
1626616226
} else {
1626716227
result = (value == NULL || !i_zend_is_true(value));
1626816228
}
@@ -17562,14 +17522,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP
1756217522
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
1756317523
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
1756417524
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
17565-
17566-
if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
17567-
/* avoid exception check */
17568-
17569-
ZEND_VM_SMART_BRANCH(result, 0);
17570-
ZVAL_BOOL(EX_VAR(opline->result.var), result);
17571-
ZEND_VM_NEXT_OPCODE();
17572-
}
1757317525
} else {
1757417526
result = (value == NULL || !i_zend_is_true(value));
1757517527
}
@@ -41717,14 +41669,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_
4171741669
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
4171841670
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
4171941671
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
41720-
41721-
if (IS_CV & (IS_CONST|IS_CV)) {
41722-
/* avoid exception check */
41723-
41724-
ZEND_VM_SMART_BRANCH(result, 0);
41725-
ZVAL_BOOL(EX_VAR(opline->result.var), result);
41726-
ZEND_VM_NEXT_OPCODE();
41727-
}
4172841672
} else {
4172941673
result = (value == NULL || !i_zend_is_true(value));
4173041674
}
@@ -45244,14 +45188,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_
4524445188
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
4524545189
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
4524645190
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
45247-
45248-
if (IS_CV & (IS_CONST|IS_CV)) {
45249-
/* avoid exception check */
45250-
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45251-
ZEND_VM_SMART_BRANCH(result, 0);
45252-
ZVAL_BOOL(EX_VAR(opline->result.var), result);
45253-
ZEND_VM_NEXT_OPCODE();
45254-
}
4525545191
} else {
4525645192
result = (value == NULL || !i_zend_is_true(value));
4525745193
}
@@ -50471,14 +50407,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_
5047150407
/* > IS_NULL means not IS_UNDEF and not IS_NULL */
5047250408
result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
5047350409
(!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
50474-
50475-
if (IS_CV & (IS_CONST|IS_CV)) {
50476-
/* avoid exception check */
50477-
50478-
ZEND_VM_SMART_BRANCH(result, 0);
50479-
ZVAL_BOOL(EX_VAR(opline->result.var), result);
50480-
ZEND_VM_NEXT_OPCODE();
50481-
}
5048250410
} else {
5048350411
result = (value == NULL || !i_zend_is_true(value));
5048450412
}

0 commit comments

Comments
 (0)