gdb: fix undefined behavior reported in copy_bitwise
gdb version 9.1, built with clang 8.0.0 on Ubuntu 18.04 (x86_64); --enable-ubsan (for clang's undefined behavior sanitizer) Executing command; `maint selftest copy_bitwise` bombs in runtime error: ../../gdb/utils.c:3432:28: runtime error: left shift of negative value -1 Closer look reveals the offending shift: `(~0 << nbits)`, apparently 0 is treated as signed int, resulting in negative complement. Explicitly stating it unsigned 0U fixes it and the `copy_bitwise` test passes ok.
This commit is contained in:
parent
de7ac122a7
commit
cf83625da2
|
@ -1,3 +1,8 @@
|
|||
2020-04-10 Artur Shepilko <nomadbyte@gmail.com>
|
||||
|
||||
* utils.c (copy_bitwise): Use unsigned 0 constant as operand of
|
||||
bit shift.
|
||||
|
||||
2020-04-10 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* symfile.c (symbol_file_add_separate): Preserve OBJF_MAINLINE.
|
||||
|
|
|
@ -3433,7 +3433,7 @@ copy_bitwise (gdb_byte *dest, ULONGEST dest_offset,
|
|||
buf |= *source << avail;
|
||||
|
||||
buf &= (1 << nbits) - 1;
|
||||
*dest = (*dest & (~0 << nbits)) | buf;
|
||||
*dest = (*dest & (~0U << nbits)) | buf;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue