From 4002572f48316d007c9b602567597a02060f76a3 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 10 Sep 2024 13:56:03 +0200 Subject: [PATCH] mbrtoc16: Fix undefined behaviour. * lib/mbrtoc16.c (SET_EXTRA_STATE): Cast to 'unsigned int' before shifting the bits to the positions 31..16. --- ChangeLog | 6 ++++++ lib/mbrtoc16.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9b25a979bd..b9fb639185 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2024-09-10 Bruno Haible + + mbrtoc16: Fix undefined behaviour. + * lib/mbrtoc16.c (SET_EXTRA_STATE): Cast to 'unsigned int' before + shifting the bits to the positions 31..16. + 2024-09-09 Bruno Haible string-desc: Fix undefined behaviour. diff --git a/lib/mbrtoc16.c b/lib/mbrtoc16.c index 1fd0fbf242..96a33fa157 100644 --- a/lib/mbrtoc16.c +++ b/lib/mbrtoc16.c @@ -45,7 +45,7 @@ static_assert (sizeof (mbstate_t) >= 4); /* mbstate_t is defined in . For more details, see glibc/iconv/skeleton.c. */ # define SET_EXTRA_STATE(ps, c16) \ - ((ps)->__count |= (c16 << 16)) + ((ps)->__count |= ((unsigned int) (c16) << 16)) # define GET_EXTRA_STATE(ps) \ (((unsigned int) (ps)->__count) >> 16) # define RESET_EXTRA_STATE(ps) \ -- 2.39.5