mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-26 19:44:11 +08:00
ubsan: shift exponent is too large
* libbfd.c (_bfd_read_unsigned_leb128): Avoid excessive shift. (_bfd_safe_read_leb128, _bfd_read_signed_leb128): Likewise.
This commit is contained in:
parent
9a12b194b0
commit
7b54caddca
@ -1,3 +1,8 @@
|
||||
2021-02-16 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* libbfd.c (_bfd_read_unsigned_leb128): Avoid excessive shift.
|
||||
(_bfd_safe_read_leb128, _bfd_read_signed_leb128): Likewise.
|
||||
|
||||
2021-02-15 Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
* doc/Makefile.am: Replace "cp -p" by "$(LN_S)".
|
||||
|
23
bfd/libbfd.c
23
bfd/libbfd.c
@ -1074,8 +1074,11 @@ _bfd_read_unsigned_leb128 (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
byte = bfd_get_8 (abfd, buf);
|
||||
buf++;
|
||||
num_read++;
|
||||
result |= (((bfd_vma) byte & 0x7f) << shift);
|
||||
shift += 7;
|
||||
if (shift < 8 * sizeof (result))
|
||||
{
|
||||
result |= (((bfd_vma) byte & 0x7f) << shift);
|
||||
shift += 7;
|
||||
}
|
||||
}
|
||||
while (byte & 0x80);
|
||||
*bytes_read_ptr = num_read;
|
||||
@ -1104,10 +1107,11 @@ _bfd_safe_read_leb128 (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
byte = bfd_get_8 (abfd, data);
|
||||
data++;
|
||||
num_read++;
|
||||
|
||||
result |= ((bfd_vma) (byte & 0x7f)) << shift;
|
||||
|
||||
shift += 7;
|
||||
if (shift < 8 * sizeof (result))
|
||||
{
|
||||
result |= ((bfd_vma) (byte & 0x7f)) << shift;
|
||||
shift += 7;
|
||||
}
|
||||
if ((byte & 0x80) == 0)
|
||||
break;
|
||||
}
|
||||
@ -1141,8 +1145,11 @@ _bfd_read_signed_leb128 (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
byte = bfd_get_8 (abfd, buf);
|
||||
buf ++;
|
||||
num_read ++;
|
||||
result |= (((bfd_vma) byte & 0x7f) << shift);
|
||||
shift += 7;
|
||||
if (shift < 8 * sizeof (result))
|
||||
{
|
||||
result |= (((bfd_vma) byte & 0x7f) << shift);
|
||||
shift += 7;
|
||||
}
|
||||
}
|
||||
while (byte & 0x80);
|
||||
if (shift < 8 * sizeof (result) && (byte & 0x40))
|
||||
|
Loading…
Reference in New Issue
Block a user