From 6a6969108e510d407755889162afbe3107f2f3d8 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 25 Mar 2011 17:14:02 +0000 Subject: [PATCH] * ar.c (move_members): Plug memory leak. --- binutils/ChangeLog | 1 + binutils/ar.c | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 832e8ac..d369ae8 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,6 +1,7 @@ 2011-03-25 Michael Snyder * strings.c (print_strings): Plug memory leak. + * ar.c (move_members): Plug memory leak. 2011-03-25 Pierre Muller diff --git a/binutils/ar.c b/binutils/ar.c index 0866a54..6320a28 100644 --- a/binutils/ar.c +++ b/binutils/ar.c @@ -1185,8 +1185,9 @@ delete_members (bfd *arch, char **files_to_delete) static void move_members (bfd *arch, char **files_to_move) { - bfd **after_bfd; /* New entries go after this one */ - bfd **current_ptr_ptr; /* cdr pointer into contents */ + bfd **after_bfd; /* New entries go after this one. */ + bfd **current_ptr_ptr; /* cdr pointer into contents. */ + const char *tmp = NULL; for (; *files_to_move; ++files_to_move) { @@ -1194,8 +1195,11 @@ move_members (bfd *arch, char **files_to_move) while (*current_ptr_ptr) { bfd *current_ptr = *current_ptr_ptr; - if (FILENAME_CMP (normalize (*files_to_move, arch), - current_ptr->filename) == 0) + + if (tmp != NULL) + free ((char *) tmp); + tmp = normalize (*files_to_move, arch); + if (FILENAME_CMP (tmp, current_ptr->filename) == 0) { /* Move this file to the end of the list - first cut from where it is. */ @@ -1219,10 +1223,13 @@ move_members (bfd *arch, char **files_to_move) /* xgettext:c-format */ fatal (_("no entry %s in archive %s!"), *files_to_move, arch->filename); - next_file:; + next_file: + ; } write_archive (arch); + if (tmp != NULL) + free ((char *) tmp); } /* Ought to default to replacing in place, but this is existing practice! */ -- 2.7.4