Commit 896653dbd27 for php
commit 896653dbd2748af42a76538c53959980411e68a6
Author: Kamil Tekiela <tekiela246@gmail.com>
Date: Wed Sep 30 18:19:43 2026 +0100
ext/mbstring: Validate and flag UTF-8 in mb_strlen() to improve performance (#24024)
diff --git a/UPGRADING b/UPGRADING
index c46af00cfe2..9692bfd9b2c 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -89,3 +89,6 @@ PHP 8.7 UPGRADE NOTES
. Improved performance of array_splice() when inserting without removing
elements.
. Improved performance of str_rot13().
+
+- MBString:
+ . Improved performance of mb_strlen for UTF-8 strings.
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
index c701a23183b..1fbb9e52415 100644
--- a/ext/mbstring/mbstring.c
+++ b/ext/mbstring/mbstring.c
@@ -1836,7 +1836,7 @@ static size_t mb_get_strlen(zend_string *string, const mbfl_encoding *encoding)
unsigned int char_len = encoding->flag & (MBFL_ENCTYPE_SBCS | MBFL_ENCTYPE_WCS2 | MBFL_ENCTYPE_WCS4);
if (char_len) {
return ZSTR_LEN(string) / char_len;
- } else if (php_mb_is_no_encoding_utf8(encoding->no_encoding) && ZSTR_IS_VALID_UTF8(string)) {
+ } else if (php_mb_is_no_encoding_utf8(encoding->no_encoding) && mb_check_str_encoding(string, &mbfl_encoding_utf8)) {
return mb_fast_strlen_utf8((unsigned char*)ZSTR_VAL(string), ZSTR_LEN(string));
}