------- Additional Comments From nickc at redhat dot com 2005-05-05 14:35 ------- Subject: Re: New: bfd leaks memory in several places
Hi John, > bfd has several memory leaks. I'm fixing the ones in dwarf2.c, but a simple > grep > for 'bfd_realloc' shows several obvious leaks on failure: > > ./bfd/bfdio.c: bim->buffer = bfd_realloc (bim->buffer, newsize); [etc] The least intrusive way to resolve most of these would be to provide a new function called, say, bfd_realloc_or_free() which could used to replace most of the calls to bfd_realloc. It could be implemented like this: Index: bfd/libbfd.c =================================================================== RCS file: /cvs/src/src/bfd/libbfd.c,v retrieving revision 1.38 diff -c -3 -p -r1.38 libbfd.c *** bfd/libbfd.c 4 May 2005 15:53:33 -0000 1.38 --- bfd/libbfd.c 5 May 2005 14:32:21 -0000 *************** bfd_realloc (void *ptr, bfd_size_type si *** 180,185 **** --- 180,214 ---- return ret; } + + /* Reallocate memory using realloc. + If this fails the pointer is freed before returning. */ + + void * + bfd_realloc_or_free (void *ptr, bfd_size_type size) + { + size_t amount = (size_t) size; + void *ret; + + if (size != amount) + ret = NULL; + else if (ptr == NULL) + ret = malloc (amount); + else + ret = realloc (ptr, amount); + + if (ret == NULL) + { + if (amount > 0) + bfd_set_error (bfd_error_no_memory); + + if (ptr != NULL) + free (ptr); + } + + return ret; + } + /* Allocate memory using malloc and clear it. */ void * What do you think ? Cheers Nick -- http://sources.redhat.com/bugzilla/show_bug.cgi?id=868 ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-binutils