RE: [PHP-DEV] Problem with ext/libxml RINIT/RSHUTDOWN
| From: | Dmitry Stogov | Date: | Fri, 17 Mar 2006 13:58:33 +0000 |
| Subject: | RE: [PHP-DEV] Problem with ext/libxml RINIT/RSHUTDOWN | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-22506@lists.php.net to get a copy of this message | ||
BTW: libxml can be compiled with LIBXML_THREAD_ENABLED.
Dmitry.
> -----Original Message-----
> From: Wez Furlong [mailto:kingwez@gmail.com]
> Sent: Friday, March 17, 2006 4:33 PM
> To: Rob Richards
> Cc: Dmitry Stogov; internals@lists.php.net
> Subject: Re: [PHP-DEV] Problem with ext/libxml RINIT/RSHUTDOWN
>
>
> 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
> >
>
>