]> granicus.if.org Git - php/commitdiff
add libxml_disable_entity_loader function
authorRob Richards <rrichards@php.net>
Tue, 23 Jun 2009 10:49:00 +0000 (10:49 +0000)
committerRob Richards <rrichards@php.net>
Tue, 23 Jun 2009 10:49:00 +0000 (10:49 +0000)
ext/libxml/libxml.c

index fb173257952824b08c4808ab1243a01dde5153ac..d817d76731f628f15233fe395a1a68c56b7db30a 100644 (file)
@@ -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)
 {