Re: [PATCH] solib_open, memory leak

Jim Blandy
2007-08-06T22:28:35Z

msnyder@sonic.net writes:
> I hope it's not getting to be too late at night for me to do this stuff...
>
> If I'm not spacy, solib_open is leaking memory, because openp passes back
> a malloc buffer for temp_pathname. In order to free it, it has to always
> be a malloc buffer (hence no alloca etc).

I think you were a little bit spacy. :)

Even if you've made sure that temp_pathname is malloc'd by the time we
reach the 'open', any later 'openp' call will throw away its value.
openp is careful to store *something* in the pointer referred to by
its last argument, even on error.

I think the invariant should be that, when found_file becomes >= 0,
then temp_pathname is malloc'd, and not before. The 'openp' clauses
will preserve that. So I think you need:

if (found_file >= 0)
temp_pathname = xstrdup (temp_pathname);

after the 'open'.

And then there's no need for the xstrdup at the bottom; just return
temp_pathname, or xfree it if the caller doesn't want it.