diff options
author | Rob Richards <rrichards@php.net> | 2009-06-23 10:50:09 +0000 |
---|---|---|
committer | Rob Richards <rrichards@php.net> | 2009-06-23 10:50:09 +0000 |
commit | f7b30e657837a50cb8cc2315019acd54960de341 (patch) | |
tree | 72d59e83b5234448fdf74b3e926588e326295084 /ext/libxml/libxml.c | |
parent | 220c68d54a6d6caeeebd10260ce6e6e337c4f792 (diff) | |
download | php-git-f7b30e657837a50cb8cc2315019acd54960de341.tar.gz |
MFH: add libxml_disable_entity_loader function
Diffstat (limited to 'ext/libxml/libxml.c')
-rw-r--r-- | ext/libxml/libxml.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index 86bc171615..b493426cf6 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} }; @@ -344,6 +350,12 @@ static int php_libxml_streams_IO_close(void *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) { xmlParserInputBufferPtr ret; @@ -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) { |