Reported by Tim Sweet <tsweet64@protonmail.com>
at <https://savannah.gnu.org/bugs/?66289>.
* lib/iconv.c (utf32be_mbtowc, utf32le_mbtowc): Cast 'unsigned char'
values to ucs4_t before shifting them to the left.
+2024-10-04 Bruno Haible <bruno@clisp.org>
+
+ iconv_open: Fix undefined behaviour.
+ Reported by Tim Sweet <tsweet64@protonmail.com>
+ at <https://savannah.gnu.org/bugs/?66289>.
+ * lib/iconv.c (utf32be_mbtowc, utf32le_mbtowc): Cast 'unsigned char'
+ values to ucs4_t before shifting them to the left.
+
2024-09-23 Bruno Haible <bruno@clisp.org>
getopt-posix: Fix compilation error in C++ mode (regression 2024-09-21).
{
if (n >= 4)
{
- ucs4_t wc = (s[0] << 24) + (s[1] << 16) + (s[2] << 8) + s[3];
+ ucs4_t wc = ((ucs4_t) s[0] << 24)
+ + ((ucs4_t) s[1] << 16)
+ + ((ucs4_t) s[2] << 8)
+ + (ucs4_t) s[3];
if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000))
{
*pwc = wc;
{
if (n >= 4)
{
- ucs4_t wc = s[0] + (s[1] << 8) + (s[2] << 16) + (s[3] << 24);
+ ucs4_t wc = (ucs4_t) s[0]
+ + ((ucs4_t) s[1] << 8)
+ + ((ucs4_t) s[2] << 16)
+ + ((ucs4_t) s[3] << 24);
if (wc < 0x110000 && !(wc >= 0xd800 && wc < 0xe000))
{
*pwc = wc;