diff options
author | Nick Clifton <nickc@redhat.com> | 2011-03-25 17:24:28 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2011-03-25 17:24:28 +0000 |
commit | 09192bc76cfb5b1a064137930f10d60e4e24d2fe (patch) | |
tree | dadcd7eb6a581c1237fda3cd868ec27cfbe37a44 /binutils/prdbg.c | |
parent | cd37dafcf4bc4c4dce9854529523aa1c3221f849 (diff) | |
download | gdb-09192bc76cfb5b1a064137930f10d60e4e24d2fe.zip gdb-09192bc76cfb5b1a064137930f10d60e4e24d2fe.tar.gz gdb-09192bc76cfb5b1a064137930f10d60e4e24d2fe.tar.bz2 |
* 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.
Diffstat (limited to 'binutils/prdbg.c')
-rw-r--r-- | binutils/prdbg.c | 82 |
1 files changed, 66 insertions, 16 deletions
diff --git a/binutils/prdbg.c b/binutils/prdbg.c index 78a8fc7..091cefe 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 <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, |