mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 02:24:17 +08:00
Fix attempt to free non-allocated pointer when parsing .debug_sup sections.
PR 27796 * dwarf.c (load_debug_sup_file): Allocate memory for filename in .debug_sup section.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2021-04-30 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR 27796
|
||||||
|
* dwarf.c (load_debug_sup_file): Allocate memory for filename in
|
||||||
|
.debug_sup section.
|
||||||
|
|
||||||
2021-04-29 Nick Clifton <nickc@redhat.com>
|
2021-04-29 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
PR 27594
|
PR 27594
|
||||||
|
@ -11327,6 +11327,7 @@ load_dwo_file (const char * main_filename, const char * name, const char * dir,
|
|||||||
/* FIXME: We should check the dwo_id. */
|
/* FIXME: We should check the dwo_id. */
|
||||||
|
|
||||||
printf (_("%s: Found separate debug object file: %s\n\n"), main_filename, separate_filename);
|
printf (_("%s: Found separate debug object file: %s\n\n"), main_filename, separate_filename);
|
||||||
|
|
||||||
add_separate_debug_file (separate_filename, separate_handle);
|
add_separate_debug_file (separate_filename, separate_handle);
|
||||||
/* Note - separate_filename will be freed in free_debug_memory(). */
|
/* Note - separate_filename will be freed in free_debug_memory(). */
|
||||||
return separate_handle;
|
return separate_handle;
|
||||||
@ -11361,20 +11362,38 @@ load_debug_sup_file (const char * main_filename, void * file)
|
|||||||
if (filename[0] != '/' && strchr (main_filename, '/'))
|
if (filename[0] != '/' && strchr (main_filename, '/'))
|
||||||
{
|
{
|
||||||
char * new_name;
|
char * new_name;
|
||||||
if (asprintf (& new_name, "%.*s/%s",
|
int new_len;
|
||||||
(int) (strrchr (main_filename, '/') - main_filename),
|
|
||||||
main_filename,
|
new_len = asprintf (& new_name, "%.*s/%s",
|
||||||
filename) < 3)
|
(int) (strrchr (main_filename, '/') - main_filename),
|
||||||
warn (_("unable to construct path for supplementary debug file"));
|
main_filename,
|
||||||
else
|
filename);
|
||||||
filename = new_name;
|
if (new_len < 3)
|
||||||
|
{
|
||||||
|
warn (_("unable to construct path for supplementary debug file"));
|
||||||
|
if (new_len > -1)
|
||||||
|
free (new_name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
filename = new_name;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* PR 27796: Make sure that we pass a filename that can be free'd to
|
||||||
|
add_separate_debug_file(). */
|
||||||
|
filename = strdup (filename);
|
||||||
|
if (filename == NULL)
|
||||||
|
{
|
||||||
|
warn (_("out of memory constructing filename for .debug_sup link\n"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void * handle;
|
void * handle = open_debug_file (filename);
|
||||||
handle = open_debug_file (filename);
|
|
||||||
if (handle == NULL)
|
if (handle == NULL)
|
||||||
{
|
{
|
||||||
warn (_("unable to open file '%s' referenced from .debug_sup section\n"), filename);
|
warn (_("unable to open file '%s' referenced from .debug_sup section\n"), filename);
|
||||||
|
free ((void *) filename);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user