* prdbg.c (pr_function_type): Close memory leaks.
authorNick Clifton <nickc@redhat.com>
Fri, 25 Mar 2011 17:24:28 +0000 (17:24 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 25 Mar 2011 17:24:28 +0000 (17:24 +0000)
(pr_method_type): Likewise.
(tg_class_static_member): Likewise.
(tg_class_method_variant): Likewise.
(tg_class_static_method_variant): Likewise.

binutils/ChangeLog
binutils/prdbg.c

index d6ee055d480c2171da1c6be1655c28ab248831dd..07cfa8a6f4698c9a618308a9586c9886eeea17aa 100644 (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>
 
index 78a8fc7511ffc9a971d7eb4191c8c363a5bef2c5..091cefeadae0fcc838b812af68d435730097bcdf 100644 (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,