Re: Problem with ext/libxml RINIT/RSHUTDOWN
| From: | Wez Furlong | Date: | Fri, 17 Mar 2006 13:33:05 +0000 |
| Subject: | Re: Problem with ext/libxml RINIT/RSHUTDOWN | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-22504@lists.php.net to get a copy of this message | ||
Sounds like a nasty situation.
I don't think it's possible to sanely restore the handlers at
rshutdown in a threaded build without screwing up the other threads
that are currently executing.
My suggestion is to not restore the handlers for threaded builds, and
if there is a library sharing/abuse issue, then treat it as an
installation/configuration problem for the person deploying it (eg:
don't do that!). There's not much you can do about that without
rewriting libxml2 to not use globals for the callbacks. :-/
--Wez.
On 3/17/06, Rob Richards <rrichards@ctindustries.net> wrote:
> Dmitry Stogov wrote:
> > Hi Wez,
> >
> > I found a bad code in ext/libxml.
> >
> > On each request startup/shutdown it changing some libxml callbacks.
> > At first this slowdown each request, at second multi-threaded PHP may fail,
> > because different threads may set/clean the same callbacks in the same time.
> >
> > May be it is possible to setup these callbacks forever in MINIT/MSHUTDOWN,
> > set some flag (somthing like LIBXML(in_request)) in RINIT/RSHUTDOWN, and
> > check it in callbacks.
> >
> Which ones in particular?
> Each of the callbacks being utilized are thread safe.
> The reason why they need to be set per request is in order to play nice
> with any other modules that might be loaded and use libxml2.
>
> for example: prior to how the current callbacks are implemented it was
> possible to blow away PHP stream usage by any of the xml extensions
> using mod_perl and its xsl module (could do this whether or not PHP was
> running threaded).
> There are also many other ways to screw with the libxml2 globals and
> effect PHP extensions based on libxml2 as well using other modules so
> the only way to protect them is on each request. In short putting them
> into the MINIT/MSHUTDOWN will open security holes.
>
> Rob
>