Avoid undefined behavior in read_signed_leb128
authorTom Tromey <tom@tromey.com>
Sat, 18 Aug 2018 02:19:13 +0000 (20:19 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 3 Oct 2018 21:19:06 +0000 (15:19 -0600)
commit4dd1b46077b2ae7331f274f7888733de5166445c
treed23e75ce337d75dbd09e648aab85b5a68ac80244
parent20562150d8a894bc91657c843ee88c508188e32e
Avoid undefined behavior in read_signed_leb128

-fsanitize=undefined pointed out that read_signed_leb128 had an
undefined left-shift when processing the final byte of a 64-bit leb:

    runtime error: left shift of 127 by 63 places cannot be represented in type 'long int'

and an undefined negation:

    runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself

Both of these problems are readily avoided by havinng
read_signed_leb128 work in an unsigned type, and then casting to the
signed type at the return.

gdb/ChangeLog
2018-10-03  Tom Tromey  <tom@tromey.com>

* dwarf2read.c (read_signed_leb128): Work in ULONGEST.
gdb/ChangeLog
gdb/dwarf2read.c