Skip to content

Commit bf487bd

Browse files
committed
Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1: Fix undefined behaviour in string uppercasing and lowercasing
2 parents 3e05059 + 93e0f6b commit bf487bd

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

Zend/zend_operators.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2867,7 +2867,7 @@ ZEND_API zend_string* ZEND_FASTCALL zend_string_tolower_ex(zend_string *str, boo
28672867
if (BLOCKCONV_FOUND()) {
28682868
zend_string *res = zend_string_alloc(length, persistent);
28692869
memcpy(ZSTR_VAL(res), ZSTR_VAL(str), p - (unsigned char *) ZSTR_VAL(str));
2870-
unsigned char *q = p + (ZSTR_VAL(res) - ZSTR_VAL(str));
2870+
unsigned char *q = (unsigned char*) ZSTR_VAL(res) + (p - (unsigned char*) ZSTR_VAL(str));
28712871

28722872
/* Lowercase the chunk we already compared. */
28732873
BLOCKCONV_INIT_DELTA('a' - 'A');
@@ -2889,7 +2889,7 @@ ZEND_API zend_string* ZEND_FASTCALL zend_string_tolower_ex(zend_string *str, boo
28892889
zend_string *res = zend_string_alloc(length, persistent);
28902890
memcpy(ZSTR_VAL(res), ZSTR_VAL(str), p - (unsigned char*) ZSTR_VAL(str));
28912891

2892-
unsigned char *q = p + (ZSTR_VAL(res) - ZSTR_VAL(str));
2892+
unsigned char *q = (unsigned char*) ZSTR_VAL(res) + (p - (unsigned char*) ZSTR_VAL(str));
28932893
while (p < end) {
28942894
*q++ = zend_tolower_ascii(*p++);
28952895
}
@@ -2916,7 +2916,7 @@ ZEND_API zend_string* ZEND_FASTCALL zend_string_toupper_ex(zend_string *str, boo
29162916
if (BLOCKCONV_FOUND()) {
29172917
zend_string *res = zend_string_alloc(length, persistent);
29182918
memcpy(ZSTR_VAL(res), ZSTR_VAL(str), p - (unsigned char *) ZSTR_VAL(str));
2919-
unsigned char *q = p + (ZSTR_VAL(res) - ZSTR_VAL(str));
2919+
unsigned char *q = (unsigned char *) ZSTR_VAL(res) + (p - (unsigned char *) ZSTR_VAL(str));
29202920

29212921
/* Uppercase the chunk we already compared. */
29222922
BLOCKCONV_INIT_DELTA('A' - 'a');
@@ -2938,7 +2938,7 @@ ZEND_API zend_string* ZEND_FASTCALL zend_string_toupper_ex(zend_string *str, boo
29382938
zend_string *res = zend_string_alloc(length, persistent);
29392939
memcpy(ZSTR_VAL(res), ZSTR_VAL(str), p - (unsigned char*) ZSTR_VAL(str));
29402940

2941-
unsigned char *q = p + (ZSTR_VAL(res) - ZSTR_VAL(str));
2941+
unsigned char *q = (unsigned char *) ZSTR_VAL(res) + (p - (unsigned char *) ZSTR_VAL(str));
29422942
while (p < end) {
29432943
*q++ = zend_toupper_ascii(*p++);
29442944
}

0 commit comments

Comments
 (0)