Skip to content

Commit 4346576

Browse files
committed
Fix shift ub in mbstring
Ideally "c" would be an unsigned integer...
1 parent 9aadcb1 commit 4346576

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

ext/mbstring/libmbfl/filters/mbfilter_ucs4.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ int mbfl_filt_conv_ucs4_wchar(int c, mbfl_convert_filter *filter)
139139
if (endian) {
140140
n = c & 0xff;
141141
} else {
142-
n = (c & 0xff) << 24;
142+
n = (c & 0xffu) << 24;
143143
}
144144
filter->cache = n;
145145
filter->status++;
@@ -164,7 +164,7 @@ int mbfl_filt_conv_ucs4_wchar(int c, mbfl_convert_filter *filter)
164164
break;
165165
default:
166166
if (endian) {
167-
n = (c & 0xff) << 24;
167+
n = (c & 0xffu) << 24;
168168
} else {
169169
n = c & 0xff;
170170
}
@@ -195,7 +195,7 @@ int mbfl_filt_conv_ucs4be_wchar(int c, mbfl_convert_filter *filter)
195195

196196
if (filter->status == 0) {
197197
filter->status = 1;
198-
n = (c & 0xff) << 24;
198+
n = (c & 0xffu) << 24;
199199
filter->cache = n;
200200
} else if (filter->status == 1) {
201201
filter->status = 2;
@@ -251,7 +251,7 @@ int mbfl_filt_conv_ucs4le_wchar(int c, mbfl_convert_filter *filter)
251251
filter->cache |= n;
252252
} else {
253253
filter->status = 0;
254-
n = ((c & 0xff) << 24) | filter->cache;
254+
n = ((c & 0xffu) << 24) | filter->cache;
255255
CK((*filter->output_function)(n, filter->data));
256256
}
257257
return c;

ext/mbstring/libmbfl/filters/mbfilter_utf32.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter)
138138
if (endian) {
139139
n = c & 0xff;
140140
} else {
141-
n = (unsigned) (c & 0xff) << 24;
141+
n = (c & 0xffu) << 24;
142142
}
143143
filter->cache = n;
144144
filter->status++;
@@ -163,7 +163,7 @@ int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter)
163163
break;
164164
default:
165165
if (endian) {
166-
n = (c & 0xff) << 24;
166+
n = (c & 0xffu) << 24;
167167
} else {
168168
n = c & 0xff;
169169
}
@@ -199,7 +199,7 @@ int mbfl_filt_conv_utf32be_wchar(int c, mbfl_convert_filter *filter)
199199

200200
if (filter->status == 0) {
201201
filter->status = 1;
202-
n = (c & 0xff) << 24;
202+
n = (c & 0xffu) << 24;
203203
filter->cache = n;
204204
} else if (filter->status == 1) {
205205
filter->status = 2;
@@ -260,7 +260,7 @@ int mbfl_filt_conv_utf32le_wchar(int c, mbfl_convert_filter *filter)
260260
filter->cache |= n;
261261
} else {
262262
filter->status = 0;
263-
n = ((c & 0xff) << 24) | filter->cache;
263+
n = ((c & 0xffu) << 24) | filter->cache;
264264
if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xd800 || n > 0xdfff)) {
265265
CK((*filter->output_function)(n, filter->data));
266266
} else {

0 commit comments

Comments
 (0)