From f5fe4c3c3891a3ebe2ac212624131e79feacfdae Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Tue, 28 Apr 2020 11:33:02 +0800 Subject: [PATCH] Use ascii lowercase if locale is default C --- ext/standard/string.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/ext/standard/string.c b/ext/standard/string.c index a3b743474b..c2e9fe3c27 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1462,29 +1462,33 @@ PHPAPI zend_string *php_string_tolower(zend_string *s) unsigned char *c; const unsigned char *e; - c = (unsigned char *)ZSTR_VAL(s); - e = c + ZSTR_LEN(s); + if (EXPECTED(!BG(locale_changed))) { + return zend_string_tolower(s); + } else { + c = (unsigned char *)ZSTR_VAL(s); + e = c + ZSTR_LEN(s); - while (c < e) { - if (isupper(*c)) { - register unsigned char *r; - zend_string *res = zend_string_alloc(ZSTR_LEN(s), 0); + while (c < e) { + if (isupper(*c)) { + register unsigned char *r; + zend_string *res = zend_string_alloc(ZSTR_LEN(s), 0); - if (c != (unsigned char*)ZSTR_VAL(s)) { - memcpy(ZSTR_VAL(res), ZSTR_VAL(s), c - (unsigned char*)ZSTR_VAL(s)); - } - r = c + (ZSTR_VAL(res) - ZSTR_VAL(s)); - while (c < e) { - *r = tolower(*c); - r++; - c++; + if (c != (unsigned char*)ZSTR_VAL(s)) { + memcpy(ZSTR_VAL(res), ZSTR_VAL(s), c - (unsigned char*)ZSTR_VAL(s)); + } + r = c + (ZSTR_VAL(res) - ZSTR_VAL(s)); + while (c < e) { + *r = tolower(*c); + r++; + c++; + } + *r = '\0'; + return res; } - *r = '\0'; - return res; + c++; } - c++; + return zend_string_copy(s); } - return zend_string_copy(s); } /* }}} */ -- 2.50.1