Skip to content

Commit 6a80918

Browse files
committed
Fix GH-17317: ResourceBundle crash on undefined iterator key.
1 parent 717b75c commit 6a80918

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

ext/intl/resourcebundle/resourcebundle_iterator.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,12 @@ static void resourcebundle_iterator_key( zend_object_iterator *iter, zval *key )
105105
}
106106

107107
if (iterator->is_table) {
108-
ZVAL_STRING(key, iterator->currentkey);
108+
if (EXPECTED(iterator->currentkey)) {
109+
ZVAL_STRING(key, iterator->currentkey);
110+
} else {
111+
ZVAL_NULL(key);
112+
ZVAL_NULL(&iterator->current);
113+
}
109114
} else {
110115
ZVAL_LONG(key, iterator->i);
111116
}

ext/intl/tests/gh17317.phpt

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
--TEST--
2+
GH-17319 (ResourceBundle iterator crash on NULL key)
3+
--EXTENSIONS--
4+
intl
5+
--CREDITS--
6+
KidFlo
7+
--FILE--
8+
<?php
9+
foreach ((new ResourceBundle('', NULL))->get('calendar')->get('buddhist') as $key => $value) {
10+
echo "KEY: "; var_dump($key);
11+
echo "VALUE: "; var_dump($value);
12+
}
13+
?>
14+
--EXPECT--
15+
KEY: string(15) "AmPmMarkersAbbr"
16+
VALUE: object(ResourceBundle)#3 (0) {
17+
}
18+
KEY: string(15) "AmPmMarkersAbbr"
19+
VALUE: object(ResourceBundle)#4 (0) {
20+
}
21+
KEY: string(16) "DateTimePatterns"
22+
VALUE: object(ResourceBundle)#3 (0) {
23+
}
24+
KEY: NULL
25+
VALUE: NULL
26+
KEY: NULL
27+
VALUE: NULL
28+
KEY: string(11) "appendItems"
29+
VALUE: object(ResourceBundle)#3 (0) {
30+
}
31+
KEY: string(16) "availableFormats"
32+
VALUE: object(ResourceBundle)#4 (0) {
33+
}
34+
KEY: string(8) "dayNames"
35+
VALUE: object(ResourceBundle)#3 (0) {
36+
}
37+
KEY: string(4) "eras"
38+
VALUE: object(ResourceBundle)#4 (0) {
39+
}
40+
KEY: string(15) "intervalFormats"
41+
VALUE: object(ResourceBundle)#3 (0) {
42+
}
43+
KEY: string(10) "monthNames"
44+
VALUE: object(ResourceBundle)#4 (0) {
45+
}
46+
KEY: string(8) "quarters"
47+
VALUE: object(ResourceBundle)#3 (0) {
48+
}

0 commit comments

Comments
 (0)