From b408366658d43f3cc4e64188096aafe59be49967 Mon Sep 17 00:00:00 2001 From: Rob Richards Date: Tue, 23 Jun 2009 10:49:00 +0000 Subject: [PATCH] add libxml_disable_entity_loader function --- ext/libxml/libxml.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index fb17325795..d817d76731 100644 --- a/ext/libxml/libxml.c +++ b/ext/libxml/libxml.c @@ -68,6 +68,7 @@ static PHP_FUNCTION(libxml_use_internal_errors); static PHP_FUNCTION(libxml_get_last_error); static PHP_FUNCTION(libxml_clear_errors); static PHP_FUNCTION(libxml_get_errors); +static PHP_FUNCTION(libxml_disable_entity_loader); static zend_class_entry *libxmlerror_class_entry; @@ -104,6 +105,10 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_libxml_clear_errors, 0) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO(arginfo_libxml_disable_entity_loader, 0) + ZEND_ARG_INFO(0, disable) +ZEND_END_ARG_INFO() + /* }}} */ /* {{{ extension definition structures */ @@ -113,6 +118,7 @@ static const zend_function_entry libxml_functions[] = { PHP_FE(libxml_get_last_error, arginfo_libxml_get_last_error) PHP_FE(libxml_clear_errors, arginfo_libxml_clear_errors) PHP_FE(libxml_get_errors, arginfo_libxml_get_errors) + PHP_FE(libxml_disable_entity_loader, arginfo_libxml_disable_entity_loader) {NULL, NULL, NULL} }; @@ -343,6 +349,12 @@ static int php_libxml_streams_IO_close(void *context) return php_stream_close((php_stream*)context); } +static xmlParserInputBufferPtr +php_libxml_input_buffer_noload(const char *URI, xmlCharEncoding enc) +{ + return NULL; +} + static xmlParserInputBufferPtr php_libxml_input_buffer_create_filename(const char *URI, xmlCharEncoding enc) { @@ -820,6 +832,31 @@ static PHP_FUNCTION(libxml_clear_errors) } /* }}} */ +/* {{{ proto bool libxml_disable_entity_loader([boolean disable]) + Disable/Enable ability to load external entities */ +static PHP_FUNCTION(libxml_disable_entity_loader) +{ + zend_bool disable = 1; + xmlParserInputBufferCreateFilenameFunc old; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &disable) == FAILURE) { + return; + } + + if (disable == 0) { + old = xmlParserInputBufferCreateFilenameDefault(php_libxml_input_buffer_create_filename); + } else { + old = xmlParserInputBufferCreateFilenameDefault(php_libxml_input_buffer_noload); + } + + if (old == php_libxml_input_buffer_noload) { + RETURN_TRUE; + } + + RETURN_FALSE; +} +/* }}} */ + /* {{{ Common functions shared by extensions */ int php_libxml_xmlCheckUTF8(const unsigned char *s) { -- 2.40.0