diff options
| author | Mark Wielaard <[email protected]> | 2015-06-09 00:31:25 +0200 |
|---|---|---|
| committer | Mark Wielaard <[email protected]> | 2015-06-10 14:14:57 +0200 |
| commit | 9e3d5c2656c993e391cc126f9e1bb921e0af4873 (patch) | |
| tree | 2b941a27024515bf3fa73147dd3c91013266ea6a /libdw/dwarf_getsrclines.c | |
| parent | 4b7953db48ed736ed913fd17a038c8474ce2198d (diff) | |
libdw: Initialize dirarray early in read_srclines.
We might jump to "out" early on error. Help gcc see that isn't an issue
by initializing dirarray to dirstack early.
Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'libdw/dwarf_getsrclines.c')
| -rw-r--r-- | libdw/dwarf_getsrclines.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c index ba9649a6..389c824d 100644 --- a/libdw/dwarf_getsrclines.c +++ b/libdw/dwarf_getsrclines.c @@ -111,6 +111,14 @@ read_srclines (Dwarf *dbg, #define MAX_STACK_FILES (MAX_STACK_ALLOC / 4) #define MAX_STACK_DIRS (MAX_STACK_ALLOC / 16) + struct dirlist + { + const char *dir; + size_t len; + }; + struct dirlist dirstack[MAX_STACK_DIRS]; + struct dirlist *dirarray = dirstack; + if (unlikely (linep + 4 > lineendp)) { invalid_data: @@ -186,11 +194,7 @@ read_srclines (Dwarf *dbg, /* First comes the list of directories. Add the compilation directory first since the index zero is used for it. */ - struct dirlist - { - const char *dir; - size_t len; - } comp_dir_elem = + struct dirlist comp_dir_elem = { .dir = comp_dir, .len = comp_dir ? strlen (comp_dir) : 0, @@ -209,11 +213,7 @@ read_srclines (Dwarf *dbg, } /* Arrange the list in array form. */ - struct dirlist dirstack[MAX_STACK_DIRS]; - struct dirlist *dirarray; - if (ndirlist < MAX_STACK_DIRS) - dirarray = dirstack; - else + if (ndirlist >= MAX_STACK_DIRS) { dirarray = (struct dirlist *) malloc (ndirlist * sizeof (*dirarray)); if (unlikely (dirarray == NULL)) |
