Skip to content

Commit 50c4f03

Browse files
committed
Convert "Illegal offset type" warnings to exceptions
1 parent c13a48c commit 50c4f03

25 files changed

+139
-158
lines changed

Zend/tests/036.phpt

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,19 @@ Trying to use lambda in array offset
33
--FILE--
44
<?php
55

6-
$test[function(){}] = 1;
7-
$a{function() { }} = 1;
6+
try {
7+
$test[function(){}] = 1;
8+
} catch (Error $e) {
9+
echo $e->getMessage(), "\n";
10+
}
11+
try {
12+
$a{function() { }} = 1;
13+
} catch (Error $e) {
14+
echo $e->getMessage(), "\n";
15+
}
816

917
?>
1018
--EXPECTF--
11-
12-
Deprecated: Array and string offset access syntax with curly braces is deprecated in %s line %d
13-
14-
Warning: Illegal offset type in %s on line %d
15-
16-
Warning: Illegal offset type in %s on line %d
19+
Deprecated: Array and string offset access syntax with curly braces is deprecated in %s on line %d
20+
Illegal offset type
21+
Illegal offset type

Zend/tests/038.phpt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ Trying to use lambda as array key
33
--FILE--
44
<?php
55

6-
var_dump(array(function() { } => 1));
6+
try {
7+
var_dump(array(function() { } => 1));
8+
} catch (Error $e) {
9+
echo $e->getMessage(), "\n";
10+
}
711

812
?>
9-
--EXPECTF--
10-
Warning: Illegal offset type in %s on line %d
11-
array(0) {
12-
}
13+
--EXPECT--
14+
Illegal offset type

Zend/tests/assign_dim_obj_null_return.phpt

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,17 @@ function test() {
1313
echo $e->getMessage(), "\n";
1414
}
1515

16-
var_dump($array[[]] = 123);
17-
var_dump($array[new stdClass] = 123);
16+
try {
17+
var_dump($array[[]] = 123);
18+
} catch (Error $e) {
19+
echo $e->getMessage(), "\n";
20+
}
21+
22+
try {
23+
var_dump($array[new stdClass] = 123);
24+
} catch (Error $e) {
25+
echo $e->getMessage(), "\n";
26+
}
1827
var_dump($true[123] = 456);
1928

2029
try {
@@ -23,8 +32,17 @@ function test() {
2332
echo $e->getMessage(), "\n";
2433
}
2534

26-
var_dump($array[[]] += 123);
27-
var_dump($array[new stdClass] += 123);
35+
try {
36+
var_dump($array[[]] += 123);
37+
} catch (Error $e) {
38+
echo $e->getMessage(), "\n";
39+
}
40+
41+
try {
42+
var_dump($array[new stdClass] += 123);
43+
} catch (Error $e) {
44+
echo $e->getMessage(), "\n";
45+
}
2846
var_dump($true[123] += 456);
2947

3048
try {
@@ -44,22 +62,14 @@ test();
4462
?>
4563
--EXPECTF--
4664
Cannot add element to the array as the next element is already occupied
47-
48-
Warning: Illegal offset type in %s on line %d
49-
NULL
50-
51-
Warning: Illegal offset type in %s on line %d
52-
NULL
65+
Illegal offset type
66+
Illegal offset type
5367

5468
Warning: Cannot use a scalar value as an array in %s on line %d
5569
NULL
5670
Cannot add element to the array as the next element is already occupied
57-
58-
Warning: Illegal offset type in %s on line %d
59-
NULL
60-
61-
Warning: Illegal offset type in %s on line %d
62-
NULL
71+
Illegal offset type
72+
Illegal offset type
6373

6474
Warning: Cannot use a scalar value as an array in %s on line %d
6575
NULL

Zend/tests/bug36303.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
--TEST--
22
Bug #36303 (foreach on error_zval produces segfault)
3+
--XFAIL--
4+
TODO: ERROR zval still possible?
35
--FILE--
46
<?php
57
$x = [];

Zend/tests/bug52237.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
--TEST--
22
Bug #52237 (Crash when passing the reference of the property of a non-object)
3+
--XFAIL--
4+
TODO: ERROR zval still possible?
35
--FILE--
46
<?php
57
$data = [];

Zend/tests/constant_expressions_invalid_offset_type_error.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const C2 = [C1, [] => 1];
88

99
?>
1010
--EXPECTF--
11-
Fatal error: Uncaught Error: Illegal offset type in %s:%d
11+
Fatal error: Uncaught TypeError: Illegal offset type in %s:%d
1212
Stack trace:
1313
#0 {main}
1414
thrown in %s on line %d

Zend/tests/offset_array.phpt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,18 @@ $fp = fopen(__FILE__, "r");
1717
var_dump($arr[$fp]);
1818

1919
$obj = new stdClass;
20-
var_dump($arr[$obj]);
20+
try {
21+
var_dump($arr[$obj]);
22+
} catch (Error $e) {
23+
echo $e->getMessage(), "\n";
24+
}
2125

2226
$arr1 = Array(1,2,3);
23-
var_dump($arr[$arr1]);
27+
try {
28+
var_dump($arr[$arr1]);
29+
} catch (Error $e) {
30+
echo $e->getMessage(), "\n";
31+
}
2432

2533
echo "Done\n";
2634
?>
@@ -38,10 +46,6 @@ int(1)
3846

3947
Notice: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d
4048
int(%d)
41-
42-
Warning: Illegal offset type in %s on line %d
43-
NULL
44-
45-
Warning: Illegal offset type in %s on line %d
46-
NULL
49+
Illegal offset type
50+
Illegal offset type
4751
Done

Zend/tests/offset_string.phpt

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,25 @@ var_dump($str[TRUE]);
1717
var_dump($str[FALSE]);
1818

1919
$fp = fopen(__FILE__, "r");
20-
var_dump($str[$fp]);
20+
try {
21+
var_dump($str[$fp]);
22+
} catch (Error $e) {
23+
echo $e->getMessage(), "\n";
24+
}
2125

2226
$obj = new stdClass;
23-
var_dump($str[$obj]);
27+
try {
28+
var_dump($str[$obj]);
29+
} catch (Error $e) {
30+
echo $e->getMessage(), "\n";
31+
}
2432

2533
$arr = Array(1,2,3);
26-
var_dump($str[$arr]);
34+
try {
35+
var_dump($str[$arr]);
36+
} catch (Error $e) {
37+
echo $e->getMessage(), "\n";
38+
}
2739

2840
echo "Done\n";
2941
?>
@@ -51,15 +63,9 @@ string(1) "i"
5163

5264
Notice: String offset cast occurred in %s on line %d
5365
string(1) "S"
54-
55-
Warning: Illegal offset type in %s on line %d
56-
string(1) "%s"
57-
58-
Warning: Illegal offset type in %s on line %d
66+
Illegal offset type
5967

6068
Notice: Object of class stdClass could not be converted to int in %s on line %d
61-
string(1) "%s"
62-
63-
Warning: Illegal offset type in %s on line %d
64-
string(1) "i"
69+
Illegal offset type
70+
Illegal offset type
6571
Done

Zend/zend_API.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1554,7 +1554,7 @@ ZEND_API int array_set_zval_key(HashTable *ht, zval *key, zval *value) /* {{{ */
15541554
result = zend_hash_index_update(ht, zend_dval_to_lval(Z_DVAL_P(key)), value);
15551555
break;
15561556
default:
1557-
zend_error(E_WARNING, "Illegal offset type");
1557+
zend_type_error("Illegal offset type");
15581558
result = NULL;
15591559
}
15601560

Zend/zend_ast.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ static int zend_ast_add_array_element(zval *result, zval *offset, zval *expr)
440440
zend_hash_index_update(Z_ARRVAL_P(result), Z_RES_HANDLE_P(offset), expr);
441441
break;
442442
default:
443-
zend_throw_error(NULL, "Illegal offset type");
443+
zend_type_error("Illegal offset type");
444444
return FAILURE;
445445
}
446446
return SUCCESS;

0 commit comments

Comments
 (0)