lt_dllopenext() returns invalid handle (was: 1.1.2 is broken if you have closefrom() )
Alan DeKok
aland at nitros9.org
Fri Jun 16 02:18:11 CEST 2006
Frank Cusack <fcusack at fcusack.com> wrote:
> Apparently, it CAN happen that handle is not NULL, but I have to assume
> that this line of code doesn't think that can happen. (Because of course,
> it is a pretty bad idea to return a non-NULL handle on failure, and ltdl
> is obviously not written by idiots.)
Intelligent is not the same as competent.
In this case, if (errors > 0), they should return NULL. That
results in a memory leak if "handle" wasn't freed, but correct code.
As it stands now, they have no *requirement* in that function that it
returns NULL on error. It's just an accidental side effect of them
sometimes freeing handle.
> You can't just read this one line of code and say "handle is returned!",
> you have to look at what is expected from try_dlopen().
Yes. I've looked at the code, and have no idea what it's doing or
why.
In any case, I think I'm going to run some analysis on it in the
next few weeks, so I should have results as to what execution path
causes the problem, and why.
> Bah. I didn't realize lt_dlhandle was opaque (because how does gdb know
> what it looks like). phooey. OK, we'll need to patch ltdl.c, but
> otherwise (ie autoconf stuff) we can still get away with untouched original
> source.
Ok.
Alan DeKok.
More information about the Freeradius-Devel
mailing list