ld signed overflow fix
authorAlan Modra <amodra@gmail.com>
Wed, 18 Dec 2019 12:33:28 +0000 (23:03 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 18 Dec 2019 12:34:35 +0000 (23:04 +1030)
* pe-dll.c (pe_get32, pe_as32): Avoid signed overflow.

ld/ChangeLog
ld/pe-dll.c

index 417bb151c15b8fdfb61ca810fa85cdbf58c79d7b..7c36a5dae1c4089e8b210bd335944dd4a2695465 100644 (file)
@@ -1,3 +1,7 @@
+2019-12-18  Alan Modra  <amodra@gmail.com>
+
+       * pe-dll.c (pe_get32, pe_as32): Avoid signed overflow.
+
 2019-12-17  Alan Modra  <amodra@gmail.com>
 
        * testsuite/ld-avr/lds-mega.d: Adjust symbols to suit objdump change.
index 4679fca6d52c91f973bd011a5634559f98655d46..7f45546aaf5ea54713346bdee7c13b868d11d184 100644 (file)
@@ -3289,7 +3289,7 @@ pe_get32 (bfd *abfd, int where)
 
   bfd_seek (abfd, (file_ptr) where, SEEK_SET);
   bfd_bread (b, (bfd_size_type) 4, abfd);
-  return b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24);
+  return b[0] + (b[1] << 8) + (b[2] << 16) + ((unsigned) b[3] << 24);
 }
 
 static unsigned int
@@ -3297,7 +3297,7 @@ pe_as32 (void *ptr)
 {
   unsigned char *b = ptr;
 
-  return b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24);
+  return b[0] + (b[1] << 8) + (b[2] << 16) + ((unsigned) b[3] << 24);
 }
 
 bfd_boolean