From 4ac14836c9d0c531a8f65c973e5d721f851ede4a Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 30 Mar 2011 15:10:37 +0000 Subject: [PATCH] * macro.c (get_any_string): Free malloced br_buf. (do_formals): Free 'formal'. --- gas/ChangeLog | 2 ++ gas/macro.c | 20 ++++++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 498c3f3..d4d4f7e 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,6 +1,8 @@ 2011-03-30 Michael Snyder * 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 diff --git a/gas/macro.c b/gas/macro.c index e392883..a74b40b 100644 --- a/gas/macro.c +++ b/gas/macro.c @@ -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); -- 2.7.4