summaryrefslogtreecommitdiffstats
path: root/libdw/dwarf_getsrclines.c
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2014-11-24 21:54:42 +0100
committerMark Wielaard <[email protected]>2014-11-26 20:28:13 +0100
commit020fc02c554226a914e9dd17394236eabe3f03d3 (patch)
tree2961806398544e699c7ca3baa4d541113fad912e /libdw/dwarf_getsrclines.c
parent59480ba86fdaad7eb2e104b69af4a3b07e20d6fb (diff)
readelf, libdw: Guard against divide by zero line_range in .debug_line.
For DW_LNS_const_add_pc and special opcodes don't accept line_range being zero. Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'libdw/dwarf_getsrclines.c')
-rw-r--r--libdw/dwarf_getsrclines.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c
index 15881e8e..d5037485 100644
--- a/libdw/dwarf_getsrclines.c
+++ b/libdw/dwarf_getsrclines.c
@@ -365,6 +365,9 @@ read_srclines (Dwarf *dbg,
/* Is this a special opcode? */
if (likely (opcode >= opcode_base))
{
+ if (unlikely (line_range == 0))
+ goto invalid_data;
+
/* Yes. Handling this is quite easy since the opcode value
is computed with
@@ -576,6 +579,9 @@ read_srclines (Dwarf *dbg,
if (unlikely (standard_opcode_lengths[opcode] != 0))
goto invalid_data;
+ if (unlikely (line_range == 0))
+ goto invalid_data;
+
advance_pc ((255 - opcode_base) / line_range);
break;