This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: scandir leak patch


Joel Sherrill wrote:
Jeff Johnston wrote:
Joel Sherrill wrote:
Attached is the current newlib scandir.c with
the "goto cleanup_and_bail" modification from
the RTEMS one plus an explicit check for 0
entries from the fstat.

How does this look?

2008-11-24 Joel Sherrill <joel.sherrill@oarcorp.com>

* libc/posix/scandir.c: Fix memory leaks.

Hi Joel,

Thanks. I did some cleanup of your patch. First of all you should have been using reallocf instead of realloc
since you reset the input pointer.
Wasn't it just realloc in CVS?
What's the rule to follow?  I don't see reallocf() Linux man pages.

No rules in particular, but realloc won't free up the original pointer if it can't allocate the larger storage. So, you could use realloc, but since you don't want to keep the original storage if larger can't be allocated, you should use a second variable to put the result in so that you don't lose the original pointer to free. The reallocf function was only very recently added to newlib. It's FreeBSD.
Secondly I wasn't thrilled with the cleanup_and_bail section occurring after the normal return so I added a flag to indicate "if successful" and used it so there would only be the one return statement. Let me know if I missed anything or whether you have any problems with the modifications.

That's fine.  Accomplishes the same thing.  I like yours.  The
only solution I don't like is the one that duplicates that code
every exit path.
I have attached a new diff which would be applied to the original scandir.c.

Looks fine to me.  I am surprised this got noticed and fixed
in the RTEMS copy of scandir.c from newlib 1.8 and never
got spotted in newlib.  That is a LONG time (16-8 == 8 years!!!)

Yes. Good thing we sync up from time to time :)
-- Jeff J.




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]