diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c index f79d21922508e..6e44f68b85790 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c @@ -349,7 +349,7 @@ const mbfl_encoding *mbfl_name2encoding_ex(const char *name, size_t name_len) /* search MIME charset name */ for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) { if ((*encoding)->mime_name) { - if (strcasecmp((*encoding)->mime_name, name) == 0) { + if (strncasecmp((*encoding)->mime_name, name, name_len) == 0 && (*encoding)->mime_name[name_len] == '\0') { return *encoding; } } @@ -359,7 +359,7 @@ const mbfl_encoding *mbfl_name2encoding_ex(const char *name, size_t name_len) for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) { if ((*encoding)->aliases) { for (const char **alias = (*encoding)->aliases; *alias; alias++) { - if (strcasecmp(*alias, name) == 0) { + if (strncasecmp(name, *alias, name_len) == 0 && (*alias)[name_len] == '\0') { return *encoding; } } diff --git a/ext/mbstring/tests/gh15824.phpt b/ext/mbstring/tests/gh15824.phpt new file mode 100644 index 0000000000000..570bb2b9d0382 --- /dev/null +++ b/ext/mbstring/tests/gh15824.phpt @@ -0,0 +1,37 @@ +--TEST-- +GH-15824 (ValueError: mb_detect_encoding(): Argument #2 ($encodings) contains invalid encoding "UTF8") +--EXTENSIONS-- +mbstring +--FILE-- + +--EXPECT-- +== alias name == +string(5) "UTF-8" +string(5) "UTF-8" +string(5) "UTF-8" +string(10) "ISO-8859-4" +string(10) "ISO-8859-5" +string(10) "ISO-8859-5" +string(10) "ISO-8859-5" +== mime name == +string(5) "ASCII" +string(7) "CP50220" +string(7) "CP50220" +string(19) "UTF-8-Mobile#KDDI-B"