summaryrefslogtreecommitdiffstats
path: root/libdwfl/dwfl_lineinfo.c
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2015-05-05 10:05:01 +0200
committerMark Wielaard <[email protected]>2015-05-12 16:34:39 +0200
commit3c1d1642789856f7a7975b92429747254083149f (patch)
treeb667d96ee8f1137bf77b89dd005c179325891401 /libdwfl/dwfl_lineinfo.c
parentd26aea9da7d618de41c797da405637dd67733956 (diff)
libdwfl: Bounds check Dwarf_Fileinfo file number in dwfl_lineinfo.
https://bugzilla.redhat.com/show_bug.cgi?id=1170810#c30 Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'libdwfl/dwfl_lineinfo.c')
-rw-r--r--libdwfl/dwfl_lineinfo.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/libdwfl/dwfl_lineinfo.c b/libdwfl/dwfl_lineinfo.c
index dfb27d82..7ddbfb07 100644
--- a/libdwfl/dwfl_lineinfo.c
+++ b/libdwfl/dwfl_lineinfo.c
@@ -1,5 +1,5 @@
/* Get information from a source line record returned by libdwfl.
- Copyright (C) 2005-2010 Red Hat, Inc.
+ Copyright (C) 2005-2010, 2015 Red Hat, Inc.
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -46,6 +46,12 @@ dwfl_lineinfo (Dwfl_Line *line, Dwarf_Addr *addr, int *linep, int *colp,
if (colp != NULL)
*colp = info->column;
+ if (unlikely (info->file >= info->files->nfiles))
+ {
+ __libdwfl_seterrno (DWFL_E (LIBDW, DWARF_E_INVALID_DWARF));
+ return NULL;
+ }
+
struct Dwarf_Fileinfo_s *file = &info->files->info[info->file];
if (mtime != NULL)
*mtime = file->mtime;