Skip to content

Commit 0685f30

Browse files
committed
Merge branch 'PHP-8.2'
* PHP-8.2: Fix GH-10627: mb_convert_encoding crashes PHP on Windows ext/mbstring: fix new_value length check
2 parents 5bfd3fa + 73f9ffc commit 0685f30

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

ext/mbstring/mbstring.c

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ static PHP_INI_MH(OnUpdate_mbstring_http_input)
742742
php_error_docref("ref.mbstring", E_DEPRECATED, "Use of mbstring.http_input is deprecated");
743743
}
744744

745-
if (!new_value) {
745+
if (!new_value || !ZSTR_LEN(new_value)) {
746746
const char *encoding = php_get_input_encoding();
747747
MBSTRG(http_input_set) = 0;
748748
_php_mb_ini_mbstring_http_input_set(encoding, strlen(encoding));
@@ -2716,15 +2716,27 @@ MBSTRING_API HashTable *php_mb_convert_encoding_recursive(HashTable *input, cons
27162716
ZEND_HASH_FOREACH_KEY_VAL(input, idx, key, entry) {
27172717
/* convert key */
27182718
if (key) {
2719-
key = php_mb_convert_encoding(ZSTR_VAL(key), ZSTR_LEN(key), to_encoding, from_encodings, num_from_encodings);
2719+
zend_string *converted_key = php_mb_convert_encoding(ZSTR_VAL(key), ZSTR_LEN(key), to_encoding, from_encodings, num_from_encodings);
2720+
if (!converted_key) {
2721+
continue;
2722+
}
2723+
key = converted_key;
27202724
}
27212725
/* convert value */
27222726
ZEND_ASSERT(entry);
27232727
try_again:
27242728
switch(Z_TYPE_P(entry)) {
2725-
case IS_STRING:
2726-
ZVAL_STR(&entry_tmp, php_mb_convert_encoding(Z_STRVAL_P(entry), Z_STRLEN_P(entry), to_encoding, from_encodings, num_from_encodings));
2729+
case IS_STRING: {
2730+
zend_string *converted_key = php_mb_convert_encoding(Z_STRVAL_P(entry), Z_STRLEN_P(entry), to_encoding, from_encodings, num_from_encodings);
2731+
if (!converted_key) {
2732+
if (key) {
2733+
zend_string_release(key);
2734+
}
2735+
continue;
2736+
}
2737+
ZVAL_STR(&entry_tmp, converted_key);
27272738
break;
2739+
}
27282740
case IS_NULL:
27292741
case IS_TRUE:
27302742
case IS_FALSE:

ext/mbstring/tests/gh10627.phpt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
--TEST--
2+
GH-10627 (mb_convert_encoding crashes PHP on Windows)
3+
--EXTENSIONS--
4+
mbstring
5+
--FILE--
6+
<?php
7+
8+
$str = 'Sökinställningar';
9+
$data = [$str, 'abc'];
10+
var_dump(mb_convert_encoding($data, 'UTF-8', 'auto'));
11+
$data = [$str => 'abc', 'abc' => 'def'];
12+
var_dump(mb_convert_encoding($data, 'UTF-8', 'auto'));
13+
14+
?>
15+
--EXPECT--
16+
array(2) {
17+
[0]=>
18+
string(16) "S?kinst?llningar"
19+
[1]=>
20+
string(3) "abc"
21+
}
22+
array(2) {
23+
["S?kinst?llningar"]=>
24+
string(3) "abc"
25+
["abc"]=>
26+
string(3) "def"
27+
}
28+

0 commit comments

Comments
 (0)