aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog7
-rw-r--r--binutils/dwarf.c24
2 files changed, 31 insertions, 0 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index cc4590a..dbf07f9 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,5 +1,12 @@
2014-11-21 Nick Clifton <nickc@redhat.com>
+ PR binutils/17512
+ * dwarf.c (get_encoded_value): Check for an encoded size of 0.
+ (display_debug_lines_raw): Check for an invalid line range value.
+ (display_debug_frames): Check for corrupt augmentation data.
+
+2014-11-21 Nick Clifton <nickc@redhat.com>
+
PR binutils/17531
* readelf.c (process_version_sections): Prevent an infinite loop
processing corrupt version need data.
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index 7f3a568..8213f4d 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -142,6 +142,14 @@ get_encoded_value (unsigned char **pdata,
return 0;
}
+ /* PR 17512: file: 1085-5603-0.004. */
+ if (size == 0)
+ {
+ warn (_("Encoded size of 0 is too small to read\n"));
+ * pdata = end;
+ return 0;
+ }
+
if (encoding & DW_EH_PE_signed)
val = byte_get_signed (data, size);
else
@@ -2786,6 +2794,13 @@ display_debug_lines_raw (struct dwarf_section *section,
printf (_(" Line Range: %d\n"), linfo.li_line_range);
printf (_(" Opcode Base: %d\n"), linfo.li_opcode_base);
+ /* PR 17512: file: 1665-6428-0.004. */
+ if (linfo.li_line_range == 0)
+ {
+ warn (_("Line range of 0 is invalid, using 1 instead\n"));
+ linfo.li_line_range = 1;
+ }
+
reset_state_machine (linfo.li_default_is_stmt);
/* Display the contents of the Opcodes table. */
@@ -5697,6 +5712,15 @@ display_debug_frames (struct dwarf_section *section,
augmentation_data_len = LEB ();
augmentation_data = start;
start += augmentation_data_len;
+ /* PR 17512: file: 722-8446-0.004. */
+ if (start >= end)
+ {
+ warn (_("Corrupt augmentation data length: %lx\n"),
+ augmentation_data_len);
+ start = end;
+ augmentation_data = NULL;
+ augmentation_data_len = 0;
+ }
}
printf ("\n%08lx %s %s FDE cie=%08lx pc=",