aboutsummaryrefslogtreecommitdiff
path: root/gdb/utils.c
diff options
context:
space:
mode:
authorArtur Shepilko <nomadbyte@gmail.com>2020-04-10 10:56:43 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2020-04-10 21:04:03 -0400
commitcf83625da29d1239e97f1eb4d145f347cb741889 (patch)
tree6b707b179bb60dbfbca74a14d8fd4af0f5a7d4c9 /gdb/utils.c
parentde7ac122a7f98c181c1ec175b0560bb48eabc6ea (diff)
downloadgdb-cf83625da29d1239e97f1eb4d145f347cb741889.zip
gdb-cf83625da29d1239e97f1eb4d145f347cb741889.tar.gz
gdb-cf83625da29d1239e97f1eb4d145f347cb741889.tar.bz2
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.
Diffstat (limited to 'gdb/utils.c')
-rw-r--r--gdb/utils.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gdb/utils.c b/gdb/utils.c
index bda6bbf..f5b2033 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -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;
}
}