* prdbg.c (pr_function_type): Close memory leaks.

(pr_method_type): Likewise.
	(tg_class_static_member): Likewise.
	(tg_class_method_variant): Likewise.
	(tg_class_static_method_variant): Likewise.
This commit is contained in:
Nick Clifton 2011-03-25 17:24:28 +00:00
parent cd37dafcf4
commit 09192bc76c
2 changed files with 71 additions and 16 deletions

View File

@ -7,6 +7,11 @@
* ieee.c (ieee_add_bb11): Plug memory leak.
(ieee_function_type): Likewise.
(ieee_class_baseclass): Likewise.
* prdbg.c (pr_function_type): Close memory leaks.
(pr_method_type): Likewise.
(tg_class_static_member): Likewise.
(tg_class_method_variant): Likewise.
(tg_class_static_method_variant): Likewise.
2011-03-25 Pierre Muller <muller@ics.u-strasbg.fr>

View File

@ -1,6 +1,6 @@
/* prdbg.c -- Print out generic debugging information.
Copyright 1995, 1996, 1999, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
2009 Free Software Foundation, Inc.
2009, 2011 Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
Tags style generation written by Salvador E. Tropea <set@computer.org>.
@ -731,10 +731,16 @@ pr_function_type (void *p, int argcount, bfd_boolean varargs)
for (i = argcount - 1; i >= 0; i--)
{
if (! substitute_type (info, ""))
return FALSE;
{
free (arg_types);
return FALSE;
}
arg_types[i] = pop_type (info);
if (arg_types[i] == NULL)
return FALSE;
{
free (arg_types);
return FALSE;
}
len += strlen (arg_types[i]) + 2;
}
if (varargs)
@ -952,10 +958,16 @@ pr_method_type (void *p, bfd_boolean domain, int argcount, bfd_boolean varargs)
for (i = argcount - 1; i >= 0; i--)
{
if (! substitute_type (info, ""))
return FALSE;
{
free (arg_types);
return FALSE;
}
arg_types[i] = pop_type (info);
if (arg_types[i] == NULL)
return FALSE;
{
free (arg_types);
return FALSE;
}
len += strlen (arg_types[i]) + 2;
}
if (varargs)
@ -2175,17 +2187,30 @@ tg_class_static_member (void *p, const char *name,
sprintf (full_name, "%s::%s", info->stack->next->type, name);
if (! substitute_type (info, full_name))
return FALSE;
{
free (full_name);
return FALSE;
}
if (! prepend_type (info, "static "))
return FALSE;
{
free (full_name);
return FALSE;
}
t = pop_type (info);
if (t == NULL)
return FALSE;
{
free (full_name);
return FALSE;
}
if (! tg_fix_visibility (info, visibility))
return FALSE;
{
free (t);
free (full_name);
return FALSE;
}
fprintf (info->f, "%s\t%s\t0;\"\tkind:x\ttype:%s\tclass:%s\taccess:%s\n",
name, info->filename, t, info->stack->type,
@ -2295,12 +2320,18 @@ tg_class_method_variant (void *p, const char *physname ATTRIBUTE_UNUSED,
/* Stick the name of the method into its type. */
if (! substitute_type (info, method_name))
return FALSE;
{
free (method_name);
return FALSE;
}
/* Get the type. */
method_type = pop_type (info);
if (method_type == NULL)
return FALSE;
{
free (method_name);
return FALSE;
}
/* Pull off the context type if there is one. */
if (! context)
@ -2309,12 +2340,21 @@ tg_class_method_variant (void *p, const char *physname ATTRIBUTE_UNUSED,
{
context_type = pop_type (info);
if (context_type == NULL)
return FALSE;
{
free (method_type);
free (method_name);
return FALSE;
}
}
/* Now the top of the stack is the class. */
if (! tg_fix_visibility (info, visibility))
return FALSE;
{
free (method_type);
free (method_name);
free (context_type);
return FALSE;
}
fprintf (info->f, "%s\t%s\t0;\"\tkind:p\ttype:%s\tclass:%s\n",
method_name, info->filename, method_type, info->stack->type);
@ -2360,16 +2400,26 @@ tg_class_static_method_variant (void *p,
method_name = strdup (info->stack->next->method);
/* Stick the name of the method into its type. */
if (! substitute_type (info, info->stack->next->method))
return FALSE;
{
free (method_name);
return FALSE;
}
/* Get the type. */
method_type = pop_type (info);
if (method_type == NULL)
return FALSE;
{
free (method_name);
return FALSE;
}
/* Now the top of the stack is the class. */
if (! tg_fix_visibility (info, visibility))
return FALSE;
{
free (method_type);
free (method_name);
return FALSE;
}
fprintf (info->f, "%s\t%s\t0;\"\tkind:p\ttype:%s\tclass:%s\taccess:%s\n",
method_name, info->filename, method_type, info->stack->type,