mirror of
https://github.com/php/php-src.git
synced 2024-09-22 18:37:25 +00:00
Merge branch 'PHP-7.4'
* PHP-7.4: Fix shift ub in mbstring Restore digit check in mb_decode_numericentity()
This commit is contained in:
commit
7d170eb295
@ -139,7 +139,7 @@ int mbfl_filt_conv_ucs4_wchar(int c, mbfl_convert_filter *filter)
|
||||
if (endian) {
|
||||
n = c & 0xff;
|
||||
} else {
|
||||
n = (c & 0xff) << 24;
|
||||
n = (c & 0xffu) << 24;
|
||||
}
|
||||
filter->cache = n;
|
||||
filter->status++;
|
||||
@ -164,7 +164,7 @@ int mbfl_filt_conv_ucs4_wchar(int c, mbfl_convert_filter *filter)
|
||||
break;
|
||||
default:
|
||||
if (endian) {
|
||||
n = (c & 0xff) << 24;
|
||||
n = (c & 0xffu) << 24;
|
||||
} else {
|
||||
n = c & 0xff;
|
||||
}
|
||||
@ -195,7 +195,7 @@ int mbfl_filt_conv_ucs4be_wchar(int c, mbfl_convert_filter *filter)
|
||||
|
||||
if (filter->status == 0) {
|
||||
filter->status = 1;
|
||||
n = (c & 0xff) << 24;
|
||||
n = (c & 0xffu) << 24;
|
||||
filter->cache = n;
|
||||
} else if (filter->status == 1) {
|
||||
filter->status = 2;
|
||||
@ -251,7 +251,7 @@ int mbfl_filt_conv_ucs4le_wchar(int c, mbfl_convert_filter *filter)
|
||||
filter->cache |= n;
|
||||
} else {
|
||||
filter->status = 0;
|
||||
n = ((c & 0xff) << 24) | filter->cache;
|
||||
n = ((c & 0xffu) << 24) | filter->cache;
|
||||
CK((*filter->output_function)(n, filter->data));
|
||||
}
|
||||
return c;
|
||||
|
@ -138,7 +138,7 @@ int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter)
|
||||
if (endian) {
|
||||
n = c & 0xff;
|
||||
} else {
|
||||
n = (unsigned) (c & 0xff) << 24;
|
||||
n = (c & 0xffu) << 24;
|
||||
}
|
||||
filter->cache = n;
|
||||
filter->status++;
|
||||
@ -163,7 +163,7 @@ int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter)
|
||||
break;
|
||||
default:
|
||||
if (endian) {
|
||||
n = (c & 0xff) << 24;
|
||||
n = (c & 0xffu) << 24;
|
||||
} else {
|
||||
n = c & 0xff;
|
||||
}
|
||||
@ -199,7 +199,7 @@ int mbfl_filt_conv_utf32be_wchar(int c, mbfl_convert_filter *filter)
|
||||
|
||||
if (filter->status == 0) {
|
||||
filter->status = 1;
|
||||
n = (c & 0xff) << 24;
|
||||
n = (c & 0xffu) << 24;
|
||||
filter->cache = n;
|
||||
} else if (filter->status == 1) {
|
||||
filter->status = 2;
|
||||
@ -260,7 +260,7 @@ int mbfl_filt_conv_utf32le_wchar(int c, mbfl_convert_filter *filter)
|
||||
filter->cache |= n;
|
||||
} else {
|
||||
filter->status = 0;
|
||||
n = ((c & 0xff) << 24) | filter->cache;
|
||||
n = ((c & 0xffu) << 24) | filter->cache;
|
||||
if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xd800 || n > 0xdfff)) {
|
||||
CK((*filter->output_function)(n, filter->data));
|
||||
} else {
|
||||
|
@ -2476,7 +2476,7 @@ collector_decode_htmlnumericentity(int c, void *data)
|
||||
f = 0;
|
||||
if (c >= 0x30 && c <= 0x39) { /* '0' - '9' */
|
||||
s = pc->cache;
|
||||
if (s > INT_MAX/10) {
|
||||
if (pc->digit > 9 || s > INT_MAX/10) {
|
||||
pc->status = 0;
|
||||
f = 1;
|
||||
} else {
|
||||
|
@ -19,6 +19,7 @@ echo mb_decode_numericentity('�', $convmap), "\n";
|
||||
echo mb_decode_numericentity('�', $convmap), "\n";
|
||||
echo mb_decode_numericentity('�', $convmap), "\n";
|
||||
echo mb_decode_numericentity('�', $convmap), "\n";
|
||||
echo mb_decode_numericentity('�', $convmap), "\n";
|
||||
|
||||
$convmap = [];
|
||||
echo mb_decode_numericentity('föo', $convmap, "UTF-8")."\n";
|
||||
@ -39,5 +40,6 @@ aŒbœcŠdše€fg
|
||||
�
|
||||
�
|
||||
�
|
||||
�
|
||||
föo
|
||||
count($convmap) must be a multiple of 4
|
||||
|
Loading…
Reference in New Issue
Block a user