]> granicus.if.org Git - php/commitdiff
- Use our external entity loader only in the context of a PHP request.
authorGustavo André dos Santos Lopes <cataphract@php.net>
Fri, 2 Sep 2011 05:14:32 +0000 (05:14 +0000)
committerGustavo André dos Santos Lopes <cataphract@php.net>
Fri, 2 Sep 2011 05:14:32 +0000 (05:14 +0000)
ext/libxml/libxml.c

index f488b38f425d4c1ada70feea27a3b4e212a57f59..00f257c7dd405a0d6a657d423f91e8925c3a0caa 100644 (file)
@@ -674,6 +674,18 @@ is_string:
        return ret;
 }
 
+static xmlParserInputPtr _php_libxml_pre_ext_ent_loader(const char *URL,
+               const char *ID, xmlParserCtxtPtr context)
+{
+       /* 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) {
+               return _php_libxml_external_entity_loader(URL, ID, context);
+       } else {
+               return _php_libxml_default_entity_loader(URL, ID, context);
+       }
+}
+
 PHP_LIBXML_API void php_libxml_ctx_error(void *ctx, const char *msg, ...)
 {
        va_list args;
@@ -713,7 +725,7 @@ PHP_LIBXML_API void php_libxml_initialize(void)
                xmlInitParser();
                
                _php_libxml_default_entity_loader = xmlGetExternalEntityLoader();
-               xmlSetExternalEntityLoader(_php_libxml_external_entity_loader);
+               xmlSetExternalEntityLoader(_php_libxml_pre_ext_ent_loader);
 
                zend_hash_init(&php_libxml_exports, 0, NULL, NULL, 1);
 
@@ -729,6 +741,8 @@ PHP_LIBXML_API void php_libxml_shutdown(void)
 #endif
                xmlCleanupParser();
                zend_hash_destroy(&php_libxml_exports);
+               
+               xmlSetExternalEntityLoader(_php_libxml_default_entity_loader);
                _php_libxml_initialized = 0;
        }
 }