Fix invalid read of section contents whilst processing a corrupt binary.
authorNick Clifton <nickc@redhat.com>
Mon, 13 Feb 2017 15:04:37 +0000 (15:04 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 13 Feb 2017 15:04:37 +0000 (15:04 +0000)
PR binutils/21135
* readelf.c (dump_section_as_bytes): Handle the case where
uncompress_section_contents returns false.

binutils/ChangeLog
binutils/readelf.c

index 10140c204e51a44116e6a38a3a48b1b19a73cad2..fdd5f33c737d2fc338c9c40cdb50c78faf1213b3 100644 (file)
@@ -1,3 +1,9 @@
+2017-02-13  Nick Clifton  <nickc@redhat.com>
+
+       PR binutils/21135
+       * readelf.c (dump_section_as_bytes): Handle the case where
+       uncompress_section_contents returns false.
+
 2017-02-13  Nick Clifton  <nickc@redhat.com>
 
        PR binutils/21149
index e6f48b424c61ff103375a952b3ee6ecd972a2c17..ede5747e40d00ea26d32cacefabd4860d4ec72f4 100644 (file)
@@ -12825,10 +12825,18 @@ dump_section_as_bytes (Elf_Internal_Shdr * section,
          new_size -= 12;
        }
 
-      if (uncompressed_size
-         && uncompress_section_contents (& start, uncompressed_size,
-                                         & new_size))
-       section_size = new_size;
+      if (uncompressed_size)
+       {
+         if (uncompress_section_contents (& start, uncompressed_size,
+                                          & new_size))
+           section_size = new_size;
+         else
+           {
+             error (_("Unable to decompress section %s\n"),
+                    printable_section_name (section));
+             return;
+           }
+       }
     }
 
   if (relocate)