This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB 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: [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.


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