diff options
author | Gustavo André dos Santos Lopes <cataphract@php.net> | 2012-06-09 17:29:47 +0100 |
---|---|---|
committer | Gustavo André dos Santos Lopes <cataphract@php.net> | 2012-06-09 17:29:47 +0100 |
commit | 503358c1797e0f7b05fb49f22dd44bc7f517069f (patch) | |
tree | 0238159e834876ee189b688f3b01f7263dc3d2f0 /ext/libxml/libxml.c | |
parent | c4cc43169c0ae05127eb406fcfd837597b72b71e (diff) | |
download | php-git-503358c1797e0f7b05fb49f22dd44bc7f517069f.tar.gz |
Fix bug #62266
Custom extension segfaults during xmlParseFile with FPM SAPI
because the regular list is not prepared during the MINIT phase
and our custom external entity loader tries to open PHP streams.
Diffstat (limited to 'ext/libxml/libxml.c')
-rw-r--r-- | ext/libxml/libxml.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index e42d845f90..a39c875b2c 100644 --- a/ext/libxml/libxml.c +++ b/ext/libxml/libxml.c @@ -677,9 +677,18 @@ is_string: static xmlParserInputPtr _php_libxml_pre_ext_ent_loader(const char *URL, const char *ID, xmlParserCtxtPtr context) { + TSRMLS_FETCH(); + /* Check whether we're running in a PHP context, since the entity loader - * we've defined is an application level (true global) setting */ - if (xmlGenericError == php_libxml_error_handler) { + * we've defined is an application level (true global) setting. + * If we are, we also want to check whether we've finished activating + * the modules (RINIT phase). Using our external entity loader during a + * RINIT should not be problem per se (though during MINIT it is, because + * we don't even have a resource list by then), but then whether one + * extension would be using the custom external entity loader or not + * could depend on extension loading order + * (if _php_libxml_per_request_initialization */ + if (xmlGenericError == php_libxml_error_handler && PG(modules_activated)) { return _php_libxml_external_entity_loader(URL, ID, context); } else { return _php_libxml_default_entity_loader(URL, ID, context); |