2018-06-05 Mark Wielaard <mark@klomp.org>
+ * dwarf_getsrclines.c (read_srclines): Define dirarray early and
+ check whether or not it is equal to dirstack on exit/out before
+ cleanup.
+
+2018-06-05 Mark Wielaard <mark@klomp.org>
+
* dwarf_getalt.c (find_debug_altlink): id_path array should be 2
larger to contain MAX_BUILD_ID_BYTES.
.discriminator = 0
};
+ /* The dirs normally go on the stack, but if there are too many
+ we alloc them all. Set up stack storage early, so we can check on
+ error if we need to free them or not. */
+ 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:
goto invalid_data;
}
- struct dirlist
- {
- const char *dir;
- size_t len;
- };
- struct dirlist dirstack[MAX_STACK_DIRS];
- struct dirlist *dirarray = dirstack;
-
/* Arrange the list in array form. */
ndirlist = ndirs;
if (ndirlist >= MAX_STACK_DIRS)
free (state.linelist);
state.linelist = ll;
}
- if (ndirlist >= MAX_STACK_DIRS)
+ if (dirarray != dirstack)
free (dirarray);
for (size_t i = MAX_STACK_FILES; i < nfilelist; i++)
{