1
0
mirror of https://github.com/php/php-src.git synced 2026-04-21 23:18:13 +02:00

Merge branch 'PHP-8.2'

* PHP-8.2:
  Fix undefined behaviour in string uppercasing and lowercasing
This commit is contained in:
Niels Dossche
2023-03-25 21:28:09 +01:00
+4 -4
View File
@@ -2893,7 +2893,7 @@ ZEND_API zend_string* ZEND_FASTCALL zend_string_tolower_ex(zend_string *str, boo
if (BLOCKCONV_FOUND()) {
zend_string *res = zend_string_alloc(length, persistent);
memcpy(ZSTR_VAL(res), ZSTR_VAL(str), p - (unsigned char *) ZSTR_VAL(str));
unsigned char *q = p + (ZSTR_VAL(res) - ZSTR_VAL(str));
unsigned char *q = (unsigned char*) ZSTR_VAL(res) + (p - (unsigned char*) ZSTR_VAL(str));
/* Lowercase the chunk we already compared. */
BLOCKCONV_INIT_DELTA('a' - 'A');
@@ -2915,7 +2915,7 @@ ZEND_API zend_string* ZEND_FASTCALL zend_string_tolower_ex(zend_string *str, boo
zend_string *res = zend_string_alloc(length, persistent);
memcpy(ZSTR_VAL(res), ZSTR_VAL(str), p - (unsigned char*) ZSTR_VAL(str));
unsigned char *q = p + (ZSTR_VAL(res) - ZSTR_VAL(str));
unsigned char *q = (unsigned char*) ZSTR_VAL(res) + (p - (unsigned char*) ZSTR_VAL(str));
while (p < end) {
*q++ = zend_tolower_ascii(*p++);
}
@@ -2942,7 +2942,7 @@ ZEND_API zend_string* ZEND_FASTCALL zend_string_toupper_ex(zend_string *str, boo
if (BLOCKCONV_FOUND()) {
zend_string *res = zend_string_alloc(length, persistent);
memcpy(ZSTR_VAL(res), ZSTR_VAL(str), p - (unsigned char *) ZSTR_VAL(str));
unsigned char *q = p + (ZSTR_VAL(res) - ZSTR_VAL(str));
unsigned char *q = (unsigned char *) ZSTR_VAL(res) + (p - (unsigned char *) ZSTR_VAL(str));
/* Uppercase the chunk we already compared. */
BLOCKCONV_INIT_DELTA('A' - 'a');
@@ -2964,7 +2964,7 @@ ZEND_API zend_string* ZEND_FASTCALL zend_string_toupper_ex(zend_string *str, boo
zend_string *res = zend_string_alloc(length, persistent);
memcpy(ZSTR_VAL(res), ZSTR_VAL(str), p - (unsigned char*) ZSTR_VAL(str));
unsigned char *q = p + (ZSTR_VAL(res) - ZSTR_VAL(str));
unsigned char *q = (unsigned char *) ZSTR_VAL(res) + (p - (unsigned char *) ZSTR_VAL(str));
while (p < end) {
*q++ = zend_toupper_ascii(*p++);
}