Signed-off-by: Mark Wielaard <[email protected]>
---
 libdw/ChangeLog           | 5 +++++
 libdw/dwarf_getsrclines.c | 5 +++++
 2 files changed, 10 insertions(+)

diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index 4f03b73..61c9871 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,5 +1,10 @@
 2014-12-16  Mark Wielaard  <[email protected]>
 
+       * dwarf_getsrclines.c (read_srclines): Check diridx is valid under
+       DW_LNE_define_file.
+
+2014-12-16  Mark Wielaard  <[email protected]>
+
        * dwarf_getpubnames.c (dwarf_getpubnames): Make sure there is enough
        space to read die offset.
 
diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c
index d477944..053b30f 100644
--- a/libdw/dwarf_getsrclines.c
+++ b/libdw/dwarf_getsrclines.c
@@ -469,6 +469,11 @@ read_srclines (Dwarf *dbg,
                if (unlikely (linep >= lineendp))
                  goto invalid_data;
                get_uleb128 (diridx, linep, lineendp);
+               if (unlikely (diridx >= ndirlist))
+                 {
+                   __libdw_seterrno (DWARF_E_INVALID_DIR_IDX);
+                   goto invalid_data;
+                 }
                Dwarf_Word mtime;
                if (unlikely (linep >= lineendp))
                  goto invalid_data;
-- 
2.1.0

Reply via email to