scandir leak patch
Jeff Johnston
jjohnstn@redhat.com
Mon Nov 24 21:29:00 GMT 2008
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.
>>
>
>
More information about the Newlib
mailing list