Fix undefined behavior that blocks compiling with UBSan

Left shifts are not defined in C if they would cause signed overflow,
so these expressions get instrumented, which makes them unusable as
switch values and triggers compile errors when compiling with UBSan.

Change-Id: I0588d4be1e00ba1cfde0eac119ead368b20d10c9
This commit is contained in:
Aidan MacDonald 2022-04-17 16:15:09 +01:00
parent c6df8cc4f7
commit fca7b8e2ff
2 changed files with 3 additions and 2 deletions

View file

@ -38,7 +38,7 @@
/* make sure SYS_EVENT_CLS_BITS has enough range */ /* make sure SYS_EVENT_CLS_BITS has enough range */
/* Bit 31->|S|c...c|i...i| */ /* Bit 31->|S|c...c|i...i| */
#define SYS_EVENT ((long)(int)(1 << 31)) #define SYS_EVENT ((long)(int)(1u << 31))
#define SYS_EVENT_CLS_BITS (3) #define SYS_EVENT_CLS_BITS (3)
#define SYS_EVENT_CLS_SHIFT (31-SYS_EVENT_CLS_BITS) #define SYS_EVENT_CLS_SHIFT (31-SYS_EVENT_CLS_BITS)
#define SYS_EVENT_CLS_MASK (((1l << SYS_EVENT_CLS_BITS)-1) << SYS_EVENT_SHIFT) #define SYS_EVENT_CLS_MASK (((1l << SYS_EVENT_CLS_BITS)-1) << SYS_EVENT_SHIFT)

View file

@ -30,7 +30,8 @@
#define TAG_NAME_LENGTH 32 #define TAG_NAME_LENGTH 32
#define TAG_VALUE_LENGTH 128 #define TAG_VALUE_LENGTH 128
#define FOURCC(a,b,c,d) (((a)<<24) | ((b) << 16) | ((c) << 8) | (d)) #define FOURCC(a,b,c,d) ((((unsigned long)(a)) << 24) | (((unsigned long)(b)) << 16) | \
(((unsigned long)(c)) << 8) | ((unsigned long)(d)))
enum tagtype { TAGTYPE_APE = 1, TAGTYPE_VORBIS }; enum tagtype { TAGTYPE_APE = 1, TAGTYPE_VORBIS };