diff options
| author | Mark Wielaard <[email protected]> | 2014-11-24 21:54:42 +0100 |
|---|---|---|
| committer | Mark Wielaard <[email protected]> | 2014-11-26 20:28:13 +0100 |
| commit | 020fc02c554226a914e9dd17394236eabe3f03d3 (patch) | |
| tree | 2961806398544e699c7ca3baa4d541113fad912e /libdw/dwarf_getsrclines.c | |
| parent | 59480ba86fdaad7eb2e104b69af4a3b07e20d6fb (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.c | 6 |
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; |
