* macro.c (get_any_string): Free malloced br_buf.
authorNick Clifton <nickc@redhat.com>
Wed, 30 Mar 2011 15:10:37 +0000 (15:10 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 30 Mar 2011 15:10:37 +0000 (15:10 +0000)
(do_formals): Free 'formal'.

gas/ChangeLog
gas/macro.c

index 498c3f3..d4d4f7e 100644 (file)
@@ -1,6 +1,8 @@
 2011-03-30  Michael Snyder  <msnyder@vmware.com>
 
        * obj-elf.c (obj_elf_section): Free malloced name.
+       * macro.c (get_any_string): Free malloced br_buf.
+       (do_formals): Free 'formal'.
 
 2011-03-30  Tristan Gingold  <gingold@adacore.com>
 
index e392883..a74b40b 100644 (file)
@@ -1,6 +1,6 @@
 /* macro.c - macro support for gas
    Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+   2004, 2005, 2006, 2007, 2008, 2011 Free Software Foundation, Inc.
 
    Written by Steve and Judy Chamberlain of Cygnus Support,
       sac@cygnus.com
@@ -119,7 +119,7 @@ buffer_and_nest (const char *from, const char *to, sb *ptr,
 
   int more = get_line (ptr);
 
-  if (to_len == 4 && strcasecmp(to, "ENDR") == 0)
+  if (to_len == 4 && strcasecmp (to, "ENDR") == 0)
     {
       from = NULL;
       from_len = 0;
@@ -384,7 +384,7 @@ get_any_string (int idx, sb *in, sb *out)
        }
       else
        {
-         char *br_buf = (char *) xmalloc(1);
+         char *br_buf = (char *) xmalloc (1);
          char *in_br = br_buf;
 
          *in_br = '\0';
@@ -407,7 +407,10 @@ get_any_string (int idx, sb *in, sb *out)
                         && in->ptr[idx] != tchar)
                    sb_add_char (out, in->ptr[idx++]);
                  if (idx == in->len)
-                   return idx;
+                   {
+                     free (br_buf);
+                     return idx;
+                   }
                  break;
                case '(':
                case '[':
@@ -415,9 +418,9 @@ get_any_string (int idx, sb *in, sb *out)
                    --in_br;
                  else
                    {
-                     br_buf = (char *) xmalloc(strlen(in_br) + 2);
-                     strcpy(br_buf + 1, in_br);
-                     free(in_br);
+                     br_buf = (char *) xmalloc (strlen (in_br) + 2);
+                     strcpy (br_buf + 1, in_br);
+                     free (in_br);
                      in_br = br_buf;
                    }
                  *in_br = tchar;
@@ -434,7 +437,7 @@ get_any_string (int idx, sb *in, sb *out)
              sb_add_char (out, tchar);
              ++idx;
            }
-         free(br_buf);
+         free (br_buf);
        }
     }
 
@@ -488,6 +491,7 @@ do_formals (macro_entry *macro, int idx, sb *in)
        {
          if (macro->formal_count)
            --idx;
+         del_formal (formal);  /* 'formal' goes out of scope.  */
          break;
        }
       idx = sb_skip_white (idx, in);