Avoid use-after-free in DWARF debug names code

A static analyzer pointed out that find_vec_in_debug_names will use
the contents of a unique_ptr after it has been destroyed.  This patch
fixes the bug by hoisting the declaration into the appropriate
enclosing block.

I'm checking this in as obvious.

gdb/ChangeLog
2019-07-01  Tom Tromey  <tromey@adacore.com>

	* dwarf2read.c
	(dw2_debug_names_iterator::find_vec_in_debug_names): Hoist
	declaration of without_params.  Fix formatting.
This commit is contained in:
Tom Tromey 2019-07-01 09:33:19 -06:00
parent 269b4ded72
commit 54ee425275
2 changed files with 9 additions and 6 deletions

View file

@ -1,3 +1,9 @@
2019-07-01 Tom Tromey <tromey@adacore.com>
* dwarf2read.c
(dw2_debug_names_iterator::find_vec_in_debug_names): Hoist
declaration of without_params. Fix formatting.
2019-07-01 Tom Tromey <tromey@adacore.com>
* ada-exp.y (find_primitive_type): Update.

View file

@ -5726,6 +5726,7 @@ dw2_debug_names_iterator::find_vec_in_debug_names
{
int (*cmp) (const char *, const char *);
gdb::unique_xmalloc_ptr<char> without_params;
if (current_language->la_language == language_cplus
|| current_language->la_language == language_fortran
|| current_language->la_language == language_d)
@ -5735,13 +5736,9 @@ dw2_debug_names_iterator::find_vec_in_debug_names
if (strchr (name, '(') != NULL)
{
gdb::unique_xmalloc_ptr<char> without_params
= cp_remove_params (name);
without_params = cp_remove_params (name);
if (without_params != NULL)
{
name = without_params.get();
}
name = without_params.get ();
}
}