This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] solib_open, memory leak
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.