summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-01-28 16:18:46 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-01-30 10:07:25 +0100
commit43465768f1aba95afd1ea5a0ac40af2cb440d1e4 (patch)
tree783a95528c4b1f4b0829c012bbd9d6a611340e20
parent9aadcb18e1d6c7f7736a00e246e193671353d741 (diff)
downloadphp-git-43465768f1aba95afd1ea5a0ac40af2cb440d1e4.tar.gz
Fix shift ub in mbstring
Ideally "c" would be an unsigned integer...
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs4.c8
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf32.c8
2 files changed, 8 insertions, 8 deletions
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c
index 26ae5d47cc..34715cd560 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c
@@ -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;
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf32.c b/ext/mbstring/libmbfl/filters/mbfilter_utf32.c
index 9f7ddf1dea..3281cf9494 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf32.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_utf32.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 {