Fix UBSAN reported for Libreoffice so files Use 1U in left shifts in bitvector_set_bit and bitvector_bit_p to avoid undefined signed left-shift behaviour. Fixes: dwz.c:9041:28: runtime error: left shift of 1 by 31 places cannot be \ represented in type 'int' #0 0x405ad3 in bitvector_bit_p dwz.c:9041 #1 0x405ad3 in create_import_tree dwz.c:9528 #2 0x405ad3 in dwz dwz.c:15445 #3 0x407517 in dwz_files dwz.c:16871 #4 0x407517 in main dwz.c:16985 #5 0x7ffff6a8eb24 in __libc_start_main ../csu/libc-start.c:332 #6 0x4086dd in _start (dwz+0x4086dd) dwz.c:9032:21: runtime error: left shift of 1 by 31 places cannot be \ represented in type 'int' #0 0x405a83 in bitvector_set_bit dwz.c:9032 #1 0x405a83 in create_import_tree dwz.c:9530 #2 0x405a83 in dwz dwz.c:15445 #3 0x407517 in dwz_files dwz.c:16871 #4 0x407517 in main dwz.c:16985 #5 0x7ffff6a8eb24 in __libc_start_main ../csu/libc-start.c:332 #6 0x4086dd in _start (dwz+0x4086dd) 2021-03-15 Martin Liska * dwz.c (bitvector_set_bit, bitvector_bit_p): Use 1U in left shift to avoid undefined signed left-shift behaviour. --- dwz.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dwz.c b/dwz.c index cd06dc6..d41e26e 100644 --- a/dwz.c +++ b/dwz.c @@ -9029,7 +9029,7 @@ bitvector_set_bit (BITVECTOR_TYPE *vector, unsigned idx) { unsigned div = idx / (sizeof (BITVECTOR_TYPE) * 8); unsigned mod = idx % (sizeof (BITVECTOR_TYPE) * 8); - vector[div] |= (1 << mod); + vector[div] |= (1U << mod); } /* Test bit IDX in bitvector VECTOR. */ @@ -9038,7 +9038,7 @@ bitvector_bit_p (BITVECTOR_TYPE *vector, unsigned idx) { unsigned div = idx / (sizeof (BITVECTOR_TYPE) * 8); unsigned mod = idx % (sizeof (BITVECTOR_TYPE) * 8); - return (vector[div] & (1 << mod)) != 0; + return (vector[div] & (1U << mod)) != 0; } /* Clear at least bits [A, B] in VECTOR, possibly more. */