From: Nick Clifton Date: Fri, 25 Mar 2011 17:24:28 +0000 (+0000) Subject: * prdbg.c (pr_function_type): Close memory leaks. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=09192bc76cfb5b1a064137930f10d60e4e24d2fe;p=binutils-gdb.git * 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. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index d6ee055d480..07cfa8a6f46 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -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 diff --git a/binutils/prdbg.c b/binutils/prdbg.c index 78a8fc7511f..091cefeadae 100644 --- a/binutils/prdbg.c +++ b/binutils/prdbg.c @@ -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 . Tags style generation written by Salvador E. Tropea . @@ -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,