Hi Mark,
On Tue, Sep 1, 2026 at 6:43 PM Mark Wielaard <[email protected]> wrote:
>
> In case of bad DWARF4 with missing DW_AT_comp_dir there might not be a
> (zero) directory name. The code already checked for that, but after
> trying to call strlen on the NULL dname. If dname is NULL we don't
> need the size and keep the filename relative.
>
> * libdw/dwarf_getsrclines.c (read_srclines): Check dname !=
> NULL before calling strlen.
>
> Suggested-by: Tristan <[email protected]>
> Signed-off-by: Mark Wielaard <[email protected]>
LGTM.
Aaron
> ---
> libdw/dwarf_getsrclines.c | 12 +++++-------
> 1 file changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c
> index 1d5f659b3e2e..5d48a934cfee 100644
> --- a/libdw/dwarf_getsrclines.c
> +++ b/libdw/dwarf_getsrclines.c
> @@ -989,20 +989,18 @@ read_srclines (Dwarf *dbg,
> const char **dirarray
> = (const char **) &((*filesp)->info[nfiles]);
>
> + /* Note in case of bad DWARF4 with missing
> + DW_AT_comp_dir there might not be a (zero)
> + directory name. We cannot do much in this
> + case. Just keep the file relative. */
> const char *dname = dirarray[diridx];
> - size_t dnamelen = strlen (dname);
> + size_t dnamelen = dname != NULL ? strlen (dname) : 0;
>
> new_file->info.name =
> libdw_alloc (dbg, char, 1, (dnamelen + fnamelen + 2));
> char *cp = new_file->info.name;
>
> if (dname != NULL)
> -
> - /* This value could be NULL in case the
> - DW_AT_comp_dir was not present. We
> - cannot do much in this case. Just
> - keep the file relative. */
> -
> {
> cp = stpcpy (cp, dname);
> *cp++ = '/';
> --
> 2.55.0
>