Skip to content

Commit 7a4b594

Browse files
committed
Convert SPL illegal offset type into TypeError
Make this consistent with the corresponding engine behavior. Also adjust the messages to match.
1 parent e1f55de commit 7a4b594

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-15
lines changed

ext/spl/spl_array.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ static zval *spl_array_get_dimension_ptr(int check_inherited, spl_array_object *
375375
ZVAL_DEREF(offset);
376376
goto try_again;
377377
default:
378-
zend_error(E_WARNING, "Illegal offset type");
378+
zend_type_error("Illegal offset type");
379379
return (type == BP_VAR_W || type == BP_VAR_RW) ?
380380
&EG(error_zval) : &EG(uninitialized_zval);
381381
}
@@ -499,7 +499,7 @@ static void spl_array_write_dimension_ex(int check_inherited, zend_object *objec
499499
ZVAL_DEREF(offset);
500500
goto try_again;
501501
default:
502-
zend_error(E_WARNING, "Illegal offset type");
502+
zend_type_error("Illegal offset type");
503503
zval_ptr_dtor(value);
504504
return;
505505
}
@@ -585,7 +585,7 @@ static void spl_array_unset_dimension_ex(int check_inherited, zend_object *objec
585585
ZVAL_DEREF(offset);
586586
goto try_again;
587587
default:
588-
zend_error(E_WARNING, "Illegal offset type");
588+
zend_type_error("Illegal offset type in unset");
589589
return;
590590
}
591591
} /* }}} */
@@ -661,7 +661,7 @@ static int spl_array_has_dimension_ex(int check_inherited, zend_object *object,
661661
ZVAL_DEREF(offset);
662662
goto try_again;
663663
default:
664-
zend_error(E_WARNING, "Illegal offset type");
664+
zend_type_error("Illegal offset type in isset or empty");
665665
return 0;
666666
}
667667

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
--TEST--
2+
ArrayObject illegal offset
3+
--FILE--
4+
<?php
5+
6+
$ao = new ArrayObject([1, 2, 3]);
7+
try {
8+
var_dump($ao[[]]);
9+
} catch (TypeError $e) {
10+
echo $e->getMessage(), "\n";
11+
}
12+
try {
13+
$ao[[]] = new stdClass;
14+
} catch (TypeError $e) {
15+
echo $e->getMessage(), "\n";
16+
}
17+
try {
18+
$ref =& $ao[[]];
19+
} catch (TypeError $e) {
20+
echo $e->getMessage(), "\n";
21+
}
22+
try {
23+
var_dump(isset($ao[[]]));
24+
} catch (TypeError $e) {
25+
echo $e->getMessage(), "\n";
26+
}
27+
try {
28+
unset($ao[[]]);
29+
} catch (TypeError $e) {
30+
echo $e->getMessage(), "\n";
31+
}
32+
33+
?>
34+
--EXPECT--
35+
Illegal offset type
36+
Illegal offset type
37+
Illegal offset type
38+
Illegal offset type in isset or empty
39+
Illegal offset type in unset

ext/spl/tests/ArrayObject_illegal_offset_leak.phpt

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)