diff options
author | Dmitry Stogov <dmitry@zend.com> | 2013-02-20 22:14:59 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2013-02-20 22:14:59 +0400 |
commit | 8e76d0404b7f664ee6719fd98f0483f0ac4669d6 (patch) | |
tree | 56d543962d36420e6ddfd39009dbc532d9356df0 /ext/soap/php_xml.c | |
parent | afc1debb2f48938e98ec35dbc6545b331b1c3096 (diff) | |
download | php-git-8e76d0404b7f664ee6719fd98f0483f0ac4669d6.tar.gz |
Fixed external entity loading
Diffstat (limited to 'ext/soap/php_xml.c')
-rw-r--r-- | ext/soap/php_xml.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/ext/soap/php_xml.c b/ext/soap/php_xml.c index 006db854e4..78231000a0 100644 --- a/ext/soap/php_xml.c +++ b/ext/soap/php_xml.c @@ -20,6 +20,7 @@ /* $Id$ */ #include "php_soap.h" +#include "ext/libxml/php_libxml.h" #include "libxml/parser.h" #include "libxml/parserInternals.h" @@ -91,14 +92,17 @@ xmlDocPtr soap_xmlParseFile(const char *filename TSRMLS_DC) ctxt = xmlCreateFileParserCtxt(filename); PG(allow_url_fopen) = old_allow_url_fopen; if (ctxt) { + zend_bool old; + ctxt->keepBlanks = 0; - ctxt->options &= ~XML_PARSE_DTDLOAD; ctxt->sax->ignorableWhitespace = soap_ignorableWhitespace; ctxt->sax->comment = soap_Comment; ctxt->sax->warning = NULL; ctxt->sax->error = NULL; /*ctxt->sax->fatalError = NULL;*/ + old = php_libxml_disable_entity_loader(1); xmlParseDocument(ctxt); + php_libxml_disable_entity_loader(old); if (ctxt->wellFormed) { ret = ctxt->myDoc; if (ret->URL == NULL && ctxt->directory != NULL) { @@ -134,7 +138,8 @@ xmlDocPtr soap_xmlParseMemory(const void *buf, size_t buf_size) */ ctxt = xmlCreateMemoryParserCtxt(buf, buf_size); if (ctxt) { - ctxt->options &= ~XML_PARSE_DTDLOAD; + zend_bool old; + ctxt->sax->ignorableWhitespace = soap_ignorableWhitespace; ctxt->sax->comment = soap_Comment; ctxt->sax->warning = NULL; @@ -143,7 +148,9 @@ xmlDocPtr soap_xmlParseMemory(const void *buf, size_t buf_size) #if LIBXML_VERSION >= 20703 ctxt->options |= XML_PARSE_HUGE; #endif + old = php_libxml_disable_entity_loader(1); xmlParseDocument(ctxt); + php_libxml_disable_entity_loader(old); if (ctxt->wellFormed) { ret = ctxt->myDoc; if (ret->URL == NULL && ctxt->directory != NULL) { |