[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
rrichards Tue Jul 22 10:29:14 2008 UTC Modified files: /php-src/ext/libxml libxml.c php_libxml.h Log: - Visibility (bug #45557) http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/libxml.c?r1=1.68r2=1.69diff_format=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.68 php-src/ext/libxml/libxml.c:1.69 --- php-src/ext/libxml/libxml.c:1.68Mon Jul 21 09:36:41 2008 +++ php-src/ext/libxml/libxml.c Tue Jul 22 10:29:14 2008 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.68 2008/07/21 09:36:41 bjori Exp $ */ +/* $Id: libxml.c,v 1.69 2008/07/22 10:29:14 rrichards Exp $ */ #define IS_EXT_MODULE @@ -523,7 +523,7 @@ } } -void php_libxml_ctx_error(void *ctx, const char *msg, ...) +PHP_LIBXML_API void php_libxml_ctx_error(void *ctx, const char *msg, ...) { va_list args; va_start(args, msg); @@ -531,7 +531,7 @@ va_end(args); } -void php_libxml_ctx_warning(void *ctx, const char *msg, ...) +PHP_LIBXML_API void php_libxml_ctx_warning(void *ctx, const char *msg, ...) { va_list args; va_start(args, msg); @@ -993,7 +993,7 @@ return ret_refcount; } -void php_libxml_node_free_resource(xmlNodePtr node TSRMLS_DC) +PHP_LIBXML_API void php_libxml_node_free_resource(xmlNodePtr node TSRMLS_DC) { if (!node) { return; @@ -1029,7 +1029,7 @@ } } -void php_libxml_node_decrement_resource(php_libxml_node_object *object TSRMLS_DC) +PHP_LIBXML_API void php_libxml_node_decrement_resource(php_libxml_node_object *object TSRMLS_DC) { int ret_refcount = -1; xmlNodePtr nodep; http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/php_libxml.h?r1=1.29r2=1.30diff_format=u Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.29 php-src/ext/libxml/php_libxml.h:1.30 --- php-src/ext/libxml/php_libxml.h:1.29Wed Jan 30 09:56:21 2008 +++ php-src/ext/libxml/php_libxml.h Tue Jul 22 10:29:14 2008 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_libxml.h,v 1.29 2008/01/30 09:56:21 dmitry Exp $ */ +/* $Id: php_libxml.h,v 1.30 2008/07/22 10:29:14 rrichards Exp $ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H @@ -86,12 +86,12 @@ PHP_LIBXML_API xmlNodePtr php_libxml_import_node(zval *object TSRMLS_DC); PHP_LIBXML_API int php_libxml_register_export(zend_class_entry *ce, php_libxml_export_node export_function); /* When an explicit freeing of node and children is required */ -void php_libxml_node_free_resource(xmlNodePtr node TSRMLS_DC); +PHP_LIBXML_API void php_libxml_node_free_resource(xmlNodePtr node TSRMLS_DC); /* When object dtor is called as node may still be referenced */ -void php_libxml_node_decrement_resource(php_libxml_node_object *object TSRMLS_DC); +PHP_LIBXML_API void php_libxml_node_decrement_resource(php_libxml_node_object *object TSRMLS_DC); PHP_LIBXML_API void php_libxml_error_handler(void *ctx, const char *msg, ...); -void php_libxml_ctx_warning(void *ctx, const char *msg, ...); -void php_libxml_ctx_error(void *ctx, const char *msg, ...); +PHP_LIBXML_API void php_libxml_ctx_warning(void *ctx, const char *msg, ...); +PHP_LIBXML_API void php_libxml_ctx_error(void *ctx, const char *msg, ...); PHP_LIBXML_API int php_libxml_xmlCheckUTF8(const unsigned char *s); PHP_LIBXML_API zval *php_libxml_switch_context(zval *context TSRMLS_DC); PHP_LIBXML_API void php_libxml_issue_error(int level, const char *msg TSRMLS_DC); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
tony2001Wed Aug 1 11:43:27 2007 UTC Modified files: /php-src/ext/libxml libxml.c php_libxml.h Log: an attempt to fix win32 build http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/libxml.c?r1=1.62r2=1.63diff_format=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.62 php-src/ext/libxml/libxml.c:1.63 --- php-src/ext/libxml/libxml.c:1.62Sat Jul 28 08:34:09 2007 +++ php-src/ext/libxml/libxml.c Wed Aug 1 11:43:27 2007 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.62 2007/07/28 08:34:09 rrichards Exp $ */ +/* $Id: libxml.c,v 1.63 2007/08/01 11:43:27 tony2001 Exp $ */ #define IS_EXT_MODULE @@ -897,7 +897,7 @@ } -int php_libxml_increment_node_ptr(php_libxml_node_object *object, xmlNodePtr node, void *private_data TSRMLS_DC) +PHP_LIBXML_API int php_libxml_increment_node_ptr(php_libxml_node_object *object, xmlNodePtr node, void *private_data TSRMLS_DC) { int ret_refcount = -1; @@ -929,7 +929,7 @@ return ret_refcount; } -int php_libxml_decrement_node_ptr(php_libxml_node_object *object TSRMLS_DC) +PHP_LIBXML_API int php_libxml_decrement_node_ptr(php_libxml_node_object *object TSRMLS_DC) { int ret_refcount = -1; php_libxml_node_ptr *obj_node; @@ -949,7 +949,7 @@ return ret_refcount; } -int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp TSRMLS_DC) +PHP_LIBXML_API int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp TSRMLS_DC) { int ret_refcount = -1; @@ -969,7 +969,7 @@ return ret_refcount; } -int php_libxml_decrement_doc_ref(php_libxml_node_object *object TSRMLS_DC) +PHP_LIBXML_API int php_libxml_decrement_doc_ref(php_libxml_node_object *object TSRMLS_DC) { int ret_refcount = -1; http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/php_libxml.h?r1=1.26r2=1.27diff_format=u Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.26 php-src/ext/libxml/php_libxml.h:1.27 --- php-src/ext/libxml/php_libxml.h:1.26Sat Jul 21 00:49:53 2007 +++ php-src/ext/libxml/php_libxml.h Wed Aug 1 11:43:27 2007 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_libxml.h,v 1.26 2007/07/21 00:49:53 jani Exp $ */ +/* $Id: php_libxml.h,v 1.27 2007/08/01 11:43:27 tony2001 Exp $ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H @@ -77,8 +77,8 @@ typedef void * (*php_libxml_export_node) (zval *object TSRMLS_DC); -int php_libxml_increment_node_ptr(php_libxml_node_object *object, xmlNodePtr node, void *private_data TSRMLS_DC); -int php_libxml_decrement_node_ptr(php_libxml_node_object *object TSRMLS_DC); +PHP_LIBXML_API int php_libxml_increment_node_ptr(php_libxml_node_object *object, xmlNodePtr node, void *private_data TSRMLS_DC); +PHP_LIBXML_API int php_libxml_decrement_node_ptr(php_libxml_node_object *object TSRMLS_DC); PHP_LIBXML_API int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp TSRMLS_DC); PHP_LIBXML_API int php_libxml_decrement_doc_ref(php_libxml_node_object *object TSRMLS_DC); PHP_LIBXML_API xmlNodePtr php_libxml_import_node(zval *object TSRMLS_DC); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
janiSat Jul 21 00:49:53 2007 UTC Modified files: /php-src/ext/libxml libxml.c php_libxml.h Log: - ws + compile warning fixes http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/libxml.c?r1=1.60r2=1.61diff_format=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.60 php-src/ext/libxml/libxml.c:1.61 --- php-src/ext/libxml/libxml.c:1.60Fri Jun 29 13:58:33 2007 +++ php-src/ext/libxml/libxml.c Sat Jul 21 00:49:53 2007 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.60 2007/06/29 13:58:33 dmitry Exp $ */ +/* $Id: libxml.c,v 1.61 2007/07/21 00:49:53 jani Exp $ */ #define IS_EXT_MODULE @@ -122,7 +122,7 @@ }; zend_module_entry libxml_module_entry = { -STANDARD_MODULE_HEADER, + STANDARD_MODULE_HEADER, libxml,/* extension name */ libxml_functions,/* extension function list */ PHP_MINIT(libxml), /* extension-wide startup function */ @@ -130,11 +130,11 @@ PHP_RINIT(libxml), /* per-request startup function */ PHP_RSHUTDOWN(libxml), /* per-request shutdown function */ PHP_MINFO(libxml), /* information function */ -NO_VERSION_YET, -PHP_MODULE_GLOBALS(libxml), /* globals descriptor */ -PHP_GINIT(libxml), /* globals ctor */ -NULL, /* globals dtor */ -NULL, /* post deactivate */ + NO_VERSION_YET, + PHP_MODULE_GLOBALS(libxml), /* globals descriptor */ + PHP_GINIT(libxml), /* globals ctor */ + NULL, /* globals dtor */ + NULL, /* post deactivate */ STANDARD_MODULE_PROPERTIES_EX }; @@ -363,10 +363,10 @@ static xmlParserInputBufferPtr php_libxml_input_buffer_create_filename(const char *URI, xmlCharEncoding enc) { -xmlParserInputBufferPtr ret; -void *context = NULL; + xmlParserInputBufferPtr ret; + void *context = NULL; -if (URI == NULL) + if (URI == NULL) return(NULL); context = php_libxml_streams_IO_open_read_wrapper(URI); @@ -392,10 +392,10 @@ xmlCharEncodingHandlerPtr encoder, int compression ATTRIBUTE_UNUSED) { -xmlOutputBufferPtr ret; -xmlURIPtr puri; -void *context = NULL; -char *unescaped = NULL; + xmlOutputBufferPtr ret; + xmlURIPtr puri; + void *context = NULL; + char *unescaped = NULL; if (URI == NULL) return(NULL); @@ -432,7 +432,8 @@ return(ret); } -static int _php_libxml_free_error(xmlErrorPtr error) { +static int _php_libxml_free_error(xmlErrorPtr error) +{ /* This will free the libxml alloc'd memory */ xmlResetError(error); return 1; @@ -566,7 +567,8 @@ } -PHP_LIBXML_API void php_libxml_initialize() { +PHP_LIBXML_API void php_libxml_initialize(void) +{ if (!_php_libxml_initialized) { /* we should be the only one's to ever init!! */ xmlInitParser(); @@ -577,7 +579,8 @@ } } -PHP_LIBXML_API void php_libxml_shutdown() { +PHP_LIBXML_API void php_libxml_shutdown(void) +{ if (_php_libxml_initialized) { #if defined(LIBXML_SCHEMAS_ENABLED) xmlRelaxNGCleanupTypes(); @@ -588,7 +591,8 @@ } } -PHP_LIBXML_API zval *php_libxml_switch_context(zval *context TSRMLS_DC) { +PHP_LIBXML_API zval *php_libxml_switch_context(zval *context TSRMLS_DC) +{ zval *oldcontext; oldcontext = LIBXML(stream_context); @@ -643,7 +647,7 @@ xmlSetGenericErrorFunc(NULL, php_libxml_error_handler); xmlParserInputBufferCreateFilenameDefault(php_libxml_input_buffer_create_filename); xmlOutputBufferCreateFilenameDefault(php_libxml_output_buffer_create_filename); -return SUCCESS; + return SUCCESS; } @@ -821,7 +825,7 @@ /* }}} */ /* {{{ proto void libxml_clear_errors() U -Clear last error from libxml */ + Clear last error from libxml */ static PHP_FUNCTION(libxml_clear_errors) { xmlResetLastError(); @@ -922,7 +926,8 @@ return ret_refcount; } -int php_libxml_decrement_node_ptr(php_libxml_node_object *object TSRMLS_DC) { +int php_libxml_decrement_node_ptr(php_libxml_node_object *object TSRMLS_DC) +{ int ret_refcount = -1; php_libxml_node_ptr *obj_node; @@ -941,7 +946,8 @@ return ret_refcount; } -int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp TSRMLS_DC) { +int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp TSRMLS_DC) +{ int ret_refcount = -1; if (object-document != NULL) { @@ -960,7 +966,8 @@ return ret_refcount; } -int php_libxml_decrement_doc_ref(php_libxml_node_object *object TSRMLS_DC) { +int
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
pollita Mon Jan 8 20:01:23 2007 UTC Modified files: /php-src/ext/libxml libxml.c php_libxml.h Log: Allow libxml DomNodes to remain persistent when requested by other extensions http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/libxml.c?r1=1.56r2=1.57diff_format=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.56 php-src/ext/libxml/libxml.c:1.57 --- php-src/ext/libxml/libxml.c:1.56Mon Jan 1 09:29:25 2007 +++ php-src/ext/libxml/libxml.c Mon Jan 8 20:01:23 2007 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.56 2007/01/01 09:29:25 sebastian Exp $ */ +/* $Id: libxml.c,v 1.57 2007/01/08 20:01:23 pollita Exp $ */ #define IS_EXT_MODULE @@ -947,7 +947,9 @@ ret_refcount = object-document-refcount; } else if (docp != NULL) { ret_refcount = 1; - object-document = emalloc(sizeof(php_libxml_ref_obj)); + object-document = pemalloc(sizeof(php_libxml_ref_obj), 0); + object-document-persistent = 0; + object-document-external_owner = 0; object-document-ptr = docp; object-document-refcount = ret_refcount; object-document-doc_props = NULL; @@ -972,9 +974,23 @@ } efree(object-document-doc_props); } - efree(object-document); + pefree(object-document, object-document-persistent); object-document = NULL; - } + } else if (ret_refcount == 1 object-document-external_owner) { + /* PHP is done with this object, but someone else owns the DomNodes, +* Kill the non-persistent bits, but leave the persistable php_libxml_ref_obj around */ + if (object-document-doc_props != NULL) { + if (object-document-doc_props-classmap) { + zend_hash_destroy(object-document-doc_props-classmap); + FREE_HASHTABLE(object-document-doc_props-classmap); + } + efree(object-document-doc_props); + object-document-doc_props = NULL; + } + /* Don't worry about the fact that this memory is left unfreed, +* Whoever else owns it has the pointer stored somewhere */ + object-document = NULL; + } } return ret_refcount; http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/php_libxml.h?r1=1.23r2=1.24diff_format=u Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.23 php-src/ext/libxml/php_libxml.h:1.24 --- php-src/ext/libxml/php_libxml.h:1.23Mon Jan 1 09:29:25 2007 +++ php-src/ext/libxml/php_libxml.h Mon Jan 8 20:01:23 2007 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_libxml.h,v 1.23 2007/01/01 09:29:25 sebastian Exp $ */ +/* $Id: php_libxml.h,v 1.24 2007/01/08 20:01:23 pollita Exp $ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H @@ -58,6 +58,8 @@ void *ptr; int refcount; libxml_doc_props *doc_props; + zend_bool persistent; + zend_bool external_owner; } php_libxml_ref_obj; typedef struct _php_libxml_node_ptr { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
nlopess Fri Nov 10 18:05:58 2006 UTC Modified files: /php-src/ext/libxml libxml.c php_libxml.h Log: MFB http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/libxml.c?r1=1.53r2=1.54diff_format=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.53 php-src/ext/libxml/libxml.c:1.54 --- php-src/ext/libxml/libxml.c:1.53Wed Sep 6 21:48:57 2006 +++ php-src/ext/libxml/libxml.c Fri Nov 10 18:05:58 2006 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.53 2006/09/06 21:48:57 edink Exp $ */ +/* $Id: libxml.c,v 1.54 2006/11/10 18:05:58 nlopess Exp $ */ #define IS_EXT_MODULE @@ -52,7 +52,7 @@ #define PHP_LIBXML_CTX_WARNING 2 /* a true global for initialization */ -int _php_libxml_initialized = 0; +static int _php_libxml_initialized = 0; typedef struct _php_libxml_func_handler { php_libxml_export_node export_func; @@ -60,10 +60,16 @@ static HashTable php_libxml_exports; -ZEND_DECLARE_MODULE_GLOBALS(libxml) +static ZEND_DECLARE_MODULE_GLOBALS(libxml) static PHP_GINIT_FUNCTION(libxml); -zend_class_entry *libxmlerror_class_entry; +static PHP_FUNCTION(libxml_set_streams_context); +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 zend_class_entry *libxmlerror_class_entry; /* {{{ dynamically loadable module stuff */ #ifdef COMPILE_DL_LIBXML @@ -72,11 +78,11 @@ /* }}} */ /* {{{ function prototypes */ -PHP_MINIT_FUNCTION(libxml); -PHP_RINIT_FUNCTION(libxml); -PHP_MSHUTDOWN_FUNCTION(libxml); -PHP_RSHUTDOWN_FUNCTION(libxml); -PHP_MINFO_FUNCTION(libxml); +static PHP_MINIT_FUNCTION(libxml); +static PHP_RINIT_FUNCTION(libxml); +static PHP_MSHUTDOWN_FUNCTION(libxml); +static PHP_RSHUTDOWN_FUNCTION(libxml); +static PHP_MINFO_FUNCTION(libxml); /* }}} */ @@ -106,7 +112,7 @@ /* }}} */ /* {{{ extension definition structures */ -zend_function_entry libxml_functions[] = { +static zend_function_entry libxml_functions[] = { PHP_FE(libxml_set_streams_context, arginfo_libxml_set_streams_context) PHP_FE(libxml_use_internal_errors, arginfo_libxml_use_internal_errors) PHP_FE(libxml_get_last_error, arginfo_libxml_get_last_error) @@ -270,7 +276,7 @@ /* Channel libxml file io layer through the PHP streams subsystem. * This allows use of ftps:// and https:// urls */ -void *php_libxml_streams_IO_open_wrapper(const char *filename, const char *mode, const int read_only) +static void *php_libxml_streams_IO_open_wrapper(const char *filename, const char *mode, const int read_only) { php_stream_statbuf ssbuf; php_stream_context *context = NULL; @@ -325,35 +331,35 @@ return ret_val; } -void *php_libxml_streams_IO_open_read_wrapper(const char *filename) +static void *php_libxml_streams_IO_open_read_wrapper(const char *filename) { return php_libxml_streams_IO_open_wrapper(filename, rb, 1); } -void *php_libxml_streams_IO_open_write_wrapper(const char *filename) +static void *php_libxml_streams_IO_open_write_wrapper(const char *filename) { return php_libxml_streams_IO_open_wrapper(filename, wb, 0); } -int php_libxml_streams_IO_read(void *context, char *buffer, int len) +static int php_libxml_streams_IO_read(void *context, char *buffer, int len) { TSRMLS_FETCH(); return php_stream_read((php_stream*)context, buffer, len); } -int php_libxml_streams_IO_write(void *context, const char *buffer, int len) +static int php_libxml_streams_IO_write(void *context, const char *buffer, int len) { TSRMLS_FETCH(); return php_stream_write((php_stream*)context, buffer, len); } -int php_libxml_streams_IO_close(void *context) +static int php_libxml_streams_IO_close(void *context) { TSRMLS_FETCH(); return php_stream_close((php_stream*)context); } -xmlParserInputBufferPtr +static xmlParserInputBufferPtr php_libxml_input_buffer_create_filename(const char *URI, xmlCharEncoding enc) { xmlParserInputBufferPtr ret; @@ -380,7 +386,7 @@ return(ret); } -xmlOutputBufferPtr +static xmlOutputBufferPtr php_libxml_output_buffer_create_filename(const char *URI, xmlCharEncodingHandlerPtr encoder, int compression ATTRIBUTE_UNUSED) @@ -405,7 +411,7 @@ xmlFree(unescaped); } -/* try with a non-escaped URI this may be a strange filename */ + /* try with a non-escaped URI this may be a strange filename */ if (context == NULL) { context = php_libxml_streams_IO_open_write_wrapper(URI); } @@ -590,7 +596,7 @@ } -PHP_MINIT_FUNCTION(libxml) +static PHP_MINIT_FUNCTION(libxml) { zend_class_entry ce; @@ -630,7 +636,7 @@ } -PHP_RINIT_FUNCTION(libxml) +static PHP_RINIT_FUNCTION(libxml) {
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
rrichards Tue Nov 22 21:54:10 2005 EDT Modified files: /php-src/ext/libxml libxml.c php_libxml.h Log: move document property struct from xml_common.h http://cvs.php.net/diff.php/php-src/ext/libxml/libxml.c?r1=1.39r2=1.40ty=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.39 php-src/ext/libxml/libxml.c:1.40 --- php-src/ext/libxml/libxml.c:1.39Thu Nov 17 16:57:30 2005 +++ php-src/ext/libxml/libxml.c Tue Nov 22 21:54:10 2005 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.39 2005/11/17 21:57:30 rasmus Exp $ */ +/* $Id: libxml.c,v 1.40 2005/11/23 02:54:10 rrichards Exp $ */ #define IS_EXT_MODULE @@ -952,6 +952,10 @@ xmlFreeDoc((xmlDoc *) object-document-ptr); } if (object-document-doc_props != NULL) { + if (object-document-doc_props-classmap) { + zend_hash_destroy(object-document-doc_props-classmap); + FREE_HASHTABLE(object-document-doc_props-classmap); + } efree(object-document-doc_props); } efree(object-document); http://cvs.php.net/diff.php/php-src/ext/libxml/php_libxml.h?r1=1.16r2=1.17ty=u Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.16 php-src/ext/libxml/php_libxml.h:1.17 --- php-src/ext/libxml/php_libxml.h:1.16Thu Sep 8 06:33:57 2005 +++ php-src/ext/libxml/php_libxml.h Tue Nov 22 21:54:10 2005 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_libxml.h,v 1.16 2005/09/08 10:33:57 rrichards Exp $ */ +/* $Id: php_libxml.h,v 1.17 2005/11/23 02:54:10 rrichards Exp $ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H @@ -43,10 +43,21 @@ zend_llist *error_list; } php_libxml_globals; +typedef struct _libxml_doc_props { + int formatoutput; + int validateonparse; + int resolveexternals; + int preservewhitespace; + int substituteentities; + int stricterror; + int recover; + HashTable *classmap; +} libxml_doc_props; + typedef struct _php_libxml_ref_obj { void *ptr; int refcount; - void *doc_props; + libxml_doc_props *doc_props; } php_libxml_ref_obj; typedef struct _php_libxml_node_ptr { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
rrichards Thu Sep 8 06:33:58 2005 EDT Modified files: /php-src/ext/libxml libxml.c php_libxml.h Log: add additional constants remove un-needed ifdefs http://cvs.php.net/diff.php/php-src/ext/libxml/libxml.c?r1=1.35r2=1.36ty=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.35 php-src/ext/libxml/libxml.c:1.36 --- php-src/ext/libxml/libxml.c:1.35Thu Aug 25 22:29:32 2005 +++ php-src/ext/libxml/libxml.c Thu Sep 8 06:33:57 2005 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.35 2005/08/26 02:29:32 rrichards Exp $ */ +/* $Id: libxml.c,v 1.36 2005/09/08 10:33:57 rrichards Exp $ */ #define IS_EXT_MODULE @@ -40,6 +40,7 @@ #include libxml/tree.h #include libxml/uri.h #include libxml/xmlerror.h +#include libxml/xmlsave.h #ifdef LIBXML_SCHEMAS_ENABLED #include libxml/relaxng.h #endif @@ -65,9 +66,7 @@ PHP_LIBXML_API php_libxml_globals libxml_globals; #endif -#if LIBXML_VERSION = 20600 zend_class_entry *libxmlerror_class_entry; -#endif /* {{{ dynamically loadable module stuff */ #ifdef COMPILE_DL_LIBXML @@ -546,9 +545,7 @@ PHP_MINIT_FUNCTION(libxml) { -#if LIBXML_VERSION = 20600 zend_class_entry ce; -#endif php_libxml_initialize(); @@ -563,7 +560,6 @@ REGISTER_LONG_CONSTANT(LIBXML_VERSION, LIBXML_VERSION, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT(LIBXML_DOTTED_VERSION, LIBXML_DOTTED_VERSION, CONST_CS | CONST_PERSISTENT); -#if LIBXML_VERSION = 20600 /* For use with loading xml */ REGISTER_LONG_CONSTANT(LIBXML_NOENT, XML_PARSE_NOENT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT(LIBXML_DTDLOAD,XML_PARSE_DTDLOAD, CONST_CS | CONST_PERSISTENT); @@ -576,6 +572,11 @@ REGISTER_LONG_CONSTANT(LIBXML_NSCLEAN,XML_PARSE_NSCLEAN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT(LIBXML_NOCDATA,XML_PARSE_NOCDATA, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT(LIBXML_NONET, XML_PARSE_NONET, CONST_CS | CONST_PERSISTENT); +#if LIBXML_VERSION = 20621 + REGISTER_LONG_CONSTANT(LIBXML_COMPACT,XML_PARSE_COMPACT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT(LIBXML_NOXMLDECL, XML_SAVE_NO_DECL, CONST_CS | CONST_PERSISTENT); +#endif + REGISTER_LONG_CONSTANT(LIBXML_NOEMPTYTAG, LIBXML_SAVE_NOEMPTYTAG, CONST_CS | CONST_PERSISTENT); /* Error levels */ REGISTER_LONG_CONSTANT(LIBXML_ERR_NONE, XML_ERR_NONE, CONST_CS | CONST_PERSISTENT); @@ -585,7 +586,6 @@ INIT_CLASS_ENTRY(ce, LibXMLError, NULL); libxmlerror_class_entry = zend_register_internal_class(ce TSRMLS_CC); -#endif return SUCCESS; } @@ -657,7 +657,6 @@ Disable libxml errors and allow user to fetch error information as needed */ PHP_FUNCTION(libxml_use_internal_errors) { -#if LIBXML_VERSION = 20600 xmlStructuredErrorFunc current_handler; int use_errors=0, retval; @@ -691,16 +690,12 @@ } } RETURN_BOOL(retval); -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, Libxml 2.6 or higher is required); -#endif } /* {{{ proto object libxml_get_last_error() Retrieve last error from libxml */ PHP_FUNCTION(libxml_get_last_error) { -#if LIBXML_VERSION = 20600 xmlErrorPtr error; error = xmlGetLastError(); @@ -724,9 +719,6 @@ } else { RETURN_FALSE; } -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, Libxml 2.6 or higher is required); -#endif } /* }}} */ @@ -734,7 +726,6 @@ Retrieve array of errors */ PHP_FUNCTION(libxml_get_errors) { -#if LIBXML_VERSION = 20600 xmlErrorPtr error; @@ -770,9 +761,6 @@ error = zend_llist_get_next(LIBXML(error_list)); } } -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, Libxml 2.6 or higher is required); -#endif } /* }}} */ @@ -780,14 +768,10 @@ Clear last error from libxml */ PHP_FUNCTION(libxml_clear_errors) { -#if LIBXML_VERSION = 20600 xmlResetLastError(); if (LIBXML(error_list)) { zend_llist_clean(LIBXML(error_list)); } -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, Libxml 2.6 or higher is required); -#endif } /* }}} */ http://cvs.php.net/diff.php/php-src/ext/libxml/php_libxml.h?r1=1.15r2=1.16ty=u Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.15 php-src/ext/libxml/php_libxml.h:1.16 --- php-src/ext/libxml/php_libxml.h:1.15Wed Aug 3 10:07:23 2005 +++ php-src/ext/libxml/php_libxml.h Thu Sep 8 06:33:57 2005 @@ -17,7 +17,7 @@
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
rrichards Sun Feb 20 16:49:45 2005 EDT Modified files: /php-src/ext/libxml php_libxml.h libxml.c Log: add function to allow extensions to use new error handling if set by user http://cvs.php.net/diff.php/php-src/ext/libxml/php_libxml.h?r1=1.12r2=1.13ty=u Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.12 php-src/ext/libxml/php_libxml.h:1.13 --- php-src/ext/libxml/php_libxml.h:1.12Thu Feb 10 10:52:38 2005 +++ php-src/ext/libxml/php_libxml.h Sun Feb 20 16:49:45 2005 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_libxml.h,v 1.12 2005/02/10 15:52:38 rrichards Exp $ */ +/* $Id: php_libxml.h,v 1.13 2005/02/20 21:49:45 rrichards Exp $ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H @@ -88,6 +88,7 @@ void php_libxml_ctx_error(void *ctx, const char *msg, ...); PHP_LIBXML_API int php_libxml_xmlCheckUTF8(const unsigned char *s); PHP_LIBXML_API zval *php_libxml_switch_context(zval *context TSRMLS_DC); +PHP_LIBXML_API void php_libxml_issue_error(int level, const char *msg TSRMLS_DC); #endif /* HAVE_LIBXML */ http://cvs.php.net/diff.php/php-src/ext/libxml/libxml.c?r1=1.28r2=1.29ty=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.28 php-src/ext/libxml/libxml.c:1.29 --- php-src/ext/libxml/libxml.c:1.28Thu Feb 10 10:52:38 2005 +++ php-src/ext/libxml/libxml.c Sun Feb 20 16:49:45 2005 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.28 2005/02/10 15:52:38 rrichards Exp $ */ +/* $Id: libxml.c,v 1.29 2005/02/20 21:49:45 rrichards Exp $ */ #define IS_EXT_MODULE @@ -388,6 +388,15 @@ } } +void php_libxml_issue_error(int level, const char *msg TSRMLS_DC) +{ + if (LIBXML(error_list)) { + _php_list_set_error_structure(NULL, msg); + } else { + php_error_docref(NULL TSRMLS_CC, level, %s, msg); + } +} + static void php_libxml_internal_error_handler(int error_type, void *ctx, const char **msg, va_list ap) { char *buf; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
rrichards Thu Feb 10 10:52:39 2005 EDT Modified files: /php-src/ext/libxml php_libxml.h libxml.c Log: initial cut of new error handling http://cvs.php.net/diff.php/php-src/ext/libxml/php_libxml.h?r1=1.11r2=1.12ty=u Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.11 php-src/ext/libxml/php_libxml.h:1.12 --- php-src/ext/libxml/php_libxml.h:1.11Tue Nov 9 03:13:35 2004 +++ php-src/ext/libxml/php_libxml.h Thu Feb 10 10:52:38 2005 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_libxml.h,v 1.11 2004/11/09 08:13:35 dmitry Exp $ */ +/* $Id: php_libxml.h,v 1.12 2005/02/10 15:52:38 rrichards Exp $ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H @@ -43,6 +43,7 @@ typedef struct { zval *stream_context; smart_str error_buffer; + zend_llist *error_list; } php_libxml_globals; typedef struct _php_libxml_ref_obj { @@ -67,11 +68,15 @@ typedef void * (*php_libxml_export_node) (zval *object TSRMLS_DC); PHP_FUNCTION(libxml_set_streams_context); +PHP_FUNCTION(libxml_use_internal_errors); +PHP_FUNCTION(libxml_get_last_error); +PHP_FUNCTION(libxml_clear_errors); +PHP_FUNCTION(libxml_get_errors); int php_libxml_increment_node_ptr(php_libxml_node_object *object, xmlNodePtr node, void *private_data TSRMLS_DC); int php_libxml_decrement_node_ptr(php_libxml_node_object *object TSRMLS_DC); -int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp TSRMLS_DC); -int php_libxml_decrement_doc_ref(php_libxml_node_object *object TSRMLS_DC); +PHP_LIBXML_API int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp TSRMLS_DC); +PHP_LIBXML_API int php_libxml_decrement_doc_ref(php_libxml_node_object *object TSRMLS_DC); PHP_LIBXML_API xmlNodePtr php_libxml_import_node(zval *object TSRMLS_DC); PHP_LIBXML_API int php_libxml_register_export(zend_class_entry *ce, php_libxml_export_node export_function); /* When an explicit freeing of node and children is required */ http://cvs.php.net/diff.php/php-src/ext/libxml/libxml.c?r1=1.27r2=1.28ty=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.27 php-src/ext/libxml/libxml.c:1.28 --- php-src/ext/libxml/libxml.c:1.27Sun Jan 2 07:21:14 2005 +++ php-src/ext/libxml/libxml.c Thu Feb 10 10:52:38 2005 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.27 2005/01/02 12:21:14 rrichards Exp $ */ +/* $Id: libxml.c,v 1.28 2005/02/10 15:52:38 rrichards Exp $ */ #define IS_EXT_MODULE @@ -65,6 +65,10 @@ PHP_LIBXML_API php_libxml_globals libxml_globals; #endif +#if LIBXML_VERSION = 20600 +zend_class_entry *libxmlerror_class_entry; +#endif + /* {{{ dynamically loadable module stuff */ #ifdef COMPILE_DL_LIBXML ZEND_GET_MODULE(libxml) @@ -86,6 +90,10 @@ /* {{{ extension definition structures */ function_entry libxml_functions[] = { PHP_FE(libxml_set_streams_context, NULL) + PHP_FE(libxml_use_internal_errors, NULL) + PHP_FE(libxml_get_last_error, NULL) + PHP_FE(libxml_clear_errors, NULL) + PHP_FE(libxml_get_errors, NULL) {NULL, NULL, NULL} }; @@ -235,6 +243,7 @@ { LIBXML(stream_context) = NULL; LIBXML(error_buffer).c = NULL; + LIBXML(error_list) = NULL; } #endif @@ -325,6 +334,45 @@ return php_stream_close((php_stream*)context); } +static int _php_libxml_free_error(xmlErrorPtr error) { + /* This will free the libxml alloc'd memory */ + xmlResetError(error); + return 1; +} + +static void _php_list_set_error_structure(xmlErrorPtr error, const char *msg) +{ + xmlError error_copy; + int ret; + + TSRMLS_FETCH(); + + memset(error_copy, 0, sizeof(xmlError)); + + if (error) { + ret = xmlCopyError(error, error_copy); + } else { + error_copy.domain = 0; + error_copy.code = XML_ERR_INTERNAL_ERROR; + error_copy.level = XML_ERR_ERROR; + error_copy.line = 0; + error_copy.node = NULL; + error_copy.int1 = 0; + error_copy.int2 = 0; + error_copy.ctxt = NULL; + error_copy.message = xmlStrdup(msg); + error_copy.file = NULL; + error_copy.str1 = NULL; + error_copy.str2 = NULL; + error_copy.str3 = NULL; + ret = 0; + } + + if (ret == 0) { + zend_llist_add_element(LIBXML(error_list), error_copy); + } +} + static void php_libxml_ctx_error_level(int level, void *ctx, const char *msg TSRMLS_DC) { xmlParserCtxtPtr parser; @@ -361,15 +409,19 @@ efree(buf); if (output == 1) { - switch (error_type) { - case PHP_LIBXML_CTX_ERROR: -
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h /ext/soap php_sdl.c php_sdl.h soap.c
dmitry Tue Nov 9 03:13:36 2004 EDT Modified files: /php-src/ext/libxml libxml.c php_libxml.h /php-src/ext/soap php_sdl.c php_sdl.h soap.c Log: Fixed bug #29211 (SoapClient doesn't request wsdl through proxy). (Rob) http://cvs.php.net/diff.php/php-src/ext/libxml/libxml.c?r1=1.23r2=1.24ty=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.23 php-src/ext/libxml/libxml.c:1.24 --- php-src/ext/libxml/libxml.c:1.23Wed Sep 8 06:15:41 2004 +++ php-src/ext/libxml/libxml.c Tue Nov 9 03:13:35 2004 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.23 2004/09/08 10:15:41 rrichards Exp $ */ +/* $Id: libxml.c,v 1.24 2004/11/09 08:13:35 dmitry Exp $ */ #define IS_EXT_MODULE @@ -243,10 +243,18 @@ int php_libxml_streams_IO_match_wrapper(const char *filename) { + char *resolved_path; + int retval; + TSRMLS_FETCH(); if (zend_is_executing(TSRMLS_C)) { - return php_stream_locate_url_wrapper(filename, NULL, 0 TSRMLS_CC) ? 1 : 0; + resolved_path = xmlURIUnescapeString(filename, 0, NULL); + retval = php_stream_locate_url_wrapper(resolved_path, NULL, 0 TSRMLS_CC) ? 1 : 0; + if (resolved_path) { + xmlFree(resolved_path); + } + return retval; } return 0; } @@ -274,7 +282,7 @@ in xml processing (eg. DTD files) */ wrapper = php_stream_locate_url_wrapper(resolved_path, path_to_open, ENFORCE_SAFE_MODE TSRMLS_CC); if (wrapper read_only wrapper-wops-url_stat) { - if (wrapper-wops-url_stat(wrapper, path_to_open, 0, ssbuf, NULL TSRMLS_CC) == -1) { + if (wrapper-wops-url_stat(wrapper, path_to_open, PHP_STREAM_URL_STAT_QUIET, ssbuf, NULL TSRMLS_CC) == -1) { xmlFree(resolved_path); return NULL; } @@ -282,11 +290,9 @@ if (LIBXML(stream_context)) { context = zend_fetch_resource(LIBXML(stream_context) TSRMLS_CC, -1, Stream-Context, NULL, 1, php_le_stream_context()); - ret_val = php_stream_open_wrapper_ex(path_to_open, (char *)mode, ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL, context); - xmlFree(resolved_path); - return ret_val; } - ret_val = php_stream_open_wrapper(path_to_open, (char *)mode, ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL); + + ret_val = php_stream_open_wrapper_ex(path_to_open, (char *)mode, ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL, context); xmlFree(resolved_path); return ret_val; } @@ -432,6 +438,15 @@ } } +PHP_LIBXML_API zval *php_libxml_switch_context(zval *context TSRMLS_DC) { + zval *oldcontext; + + oldcontext = LIBXML(stream_context); + LIBXML(stream_context) = context; + return oldcontext; + +} + PHP_MINIT_FUNCTION(libxml) { php_libxml_initialize(); @@ -503,7 +518,6 @@ } /* }}} */ - /* {{{ Common functions shared by extensions */ int php_libxml_xmlCheckUTF8(const unsigned char *s) { http://cvs.php.net/diff.php/php-src/ext/libxml/php_libxml.h?r1=1.10r2=1.11ty=u Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.10 php-src/ext/libxml/php_libxml.h:1.11 --- php-src/ext/libxml/php_libxml.h:1.10Wed Sep 8 06:15:41 2004 +++ php-src/ext/libxml/php_libxml.h Tue Nov 9 03:13:35 2004 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_libxml.h,v 1.10 2004/09/08 10:15:41 rrichards Exp $ */ +/* $Id: php_libxml.h,v 1.11 2004/11/09 08:13:35 dmitry Exp $ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H @@ -67,6 +67,7 @@ typedef void * (*php_libxml_export_node) (zval *object TSRMLS_DC); PHP_FUNCTION(libxml_set_streams_context); + int php_libxml_increment_node_ptr(php_libxml_node_object *object, xmlNodePtr node, void *private_data TSRMLS_DC); int php_libxml_decrement_node_ptr(php_libxml_node_object *object TSRMLS_DC); int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp TSRMLS_DC); @@ -81,6 +82,7 @@ void php_libxml_ctx_warning(void *ctx, const char *msg, ...); void php_libxml_ctx_error(void *ctx, const char *msg, ...); PHP_LIBXML_API int php_libxml_xmlCheckUTF8(const unsigned char *s); +PHP_LIBXML_API zval *php_libxml_switch_context(zval *context TSRMLS_DC); #endif /* HAVE_LIBXML */ http://cvs.php.net/diff.php/php-src/ext/soap/php_sdl.c?r1=1.75r2=1.76ty=u Index: php-src/ext/soap/php_sdl.c diff -u php-src/ext/soap/php_sdl.c:1.75 php-src/ext/soap/php_sdl.c:1.76 --- php-src/ext/soap/php_sdl.c:1.75 Sun Sep 26 17:45:17 2004 +++ php-src/ext/soap/php_sdl.c Tue Nov 9 03:13:35 2004 @@ -17,9 +17,10 @@ | Dmitry Stogov [EMAIL PROTECTED] |
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
rrichards Sun Jul 25 08:00:28 2004 EDT Modified files: /php-src/ext/libxml php_libxml.h libxml.c Log: export php_libxml_error_handler for win32 build http://cvs.php.net/diff.php/php-src/ext/libxml/php_libxml.h?r1=1.8r2=1.9ty=u Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.8 php-src/ext/libxml/php_libxml.h:1.9 --- php-src/ext/libxml/php_libxml.h:1.8 Mon Mar 1 07:09:22 2004 +++ php-src/ext/libxml/php_libxml.h Sun Jul 25 08:00:28 2004 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_libxml.h,v 1.8 2004/03/01 12:09:22 rrichards Exp $ */ +/* $Id: php_libxml.h,v 1.9 2004/07/25 12:00:28 rrichards Exp $ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H @@ -77,7 +77,7 @@ void php_libxml_node_free_resource(xmlNodePtr node TSRMLS_DC); /* When object dtor is called as node may still be referenced */ void php_libxml_node_decrement_resource(php_libxml_node_object *object TSRMLS_DC); -void php_libxml_error_handler(void *ctx, const char *msg, ...); +PHP_LIBXML_API void php_libxml_error_handler(void *ctx, const char *msg, ...); void php_libxml_ctx_warning(void *ctx, const char *msg, ...); void php_libxml_ctx_error(void *ctx, const char *msg, ...); http://cvs.php.net/diff.php/php-src/ext/libxml/libxml.c?r1=1.20r2=1.21ty=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.20 php-src/ext/libxml/libxml.c:1.21 --- php-src/ext/libxml/libxml.c:1.20Sun Jul 25 06:37:27 2004 +++ php-src/ext/libxml/libxml.c Sun Jul 25 08:00:28 2004 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.20 2004/07/25 10:37:27 chregu Exp $ */ +/* $Id: libxml.c,v 1.21 2004/07/25 12:00:28 rrichards Exp $ */ #define IS_EXT_MODULE @@ -377,7 +377,7 @@ va_end(args); } -void php_libxml_error_handler(void *ctx, const char *msg, ...) +PHP_LIBXML_API void php_libxml_error_handler(void *ctx, const char *msg, ...) { va_list args; va_start(args, msg); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
helly Sat Jan 10 08:23:59 2004 EDT Modified files: /php-src/ext/libxml libxml.c php_libxml.h Log: Fix memory corruption with libxml's error handling. Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.13 php-src/ext/libxml/libxml.c:1.14 --- php-src/ext/libxml/libxml.c:1.13Thu Jan 8 03:15:56 2004 +++ php-src/ext/libxml/libxml.c Sat Jan 10 08:23:58 2004 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.13 2004/01/08 08:15:56 andi Exp $ */ +/* $Id: libxml.c,v 1.14 2004/01/10 13:23:58 helly Exp $ */ #define IS_EXT_MODULE @@ -225,7 +225,7 @@ static void php_libxml_init_globals(php_libxml_globals *libxml_globals_p TSRMLS_DC) { LIBXML(stream_context) = NULL; - LIBXML(error_buffer) = NULL; + LIBXML(error_buffer).c = NULL; } #endif @@ -336,16 +336,15 @@ if (output == 1) { switch (error_type) { case PHP_LIBXML_CTX_ERROR: - php_libxml_ctx_error_level(E_WARNING, ctx, (char *) LIBXML(error_buffer) TSRMLS_CC); + php_libxml_ctx_error_level(E_WARNING, ctx, LIBXML(error_buffer).c TSRMLS_CC); break; case PHP_LIBXML_CTX_WARNING: - php_libxml_ctx_error_level(E_NOTICE, ctx, (char *) LIBXML(error_buffer) TSRMLS_CC); + php_libxml_ctx_error_level(E_NOTICE, ctx, LIBXML(error_buffer).c TSRMLS_CC); break; default: - php_error(E_WARNING, %s, (char *) LIBXML(error_buffer)); + php_error(E_WARNING, %s, LIBXML(error_buffer).c); } smart_str_free(LIBXML(error_buffer)); - LIBXML(error_buffer) = NULL; } } @@ -419,7 +418,7 @@ ts_allocate_id(libxml_globals_id, sizeof(php_libxml_globals), (ts_allocate_ctor) php_libxml_init_globals, NULL); #else LIBXML(stream_context) = NULL; - LIBXML(error_buffer) = NULL; + LIBXML(error_buffer).c = NULL; #endif return SUCCESS; @@ -441,10 +440,7 @@ PHP_RSHUTDOWN_FUNCTION(libxml) { - if (LIBXML(error_buffer)) { - smart_str_free(LIBXML(error_buffer)); - LIBXML(error_buffer) = NULL; - } + smart_str_free(LIBXML(error_buffer)); return SUCCESS; } Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.6 php-src/ext/libxml/php_libxml.h:1.7 --- php-src/ext/libxml/php_libxml.h:1.6 Thu Jan 8 12:32:20 2004 +++ php-src/ext/libxml/php_libxml.h Sat Jan 10 08:23:58 2004 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_libxml.h,v 1.6 2004/01/08 17:32:20 sniper Exp $ */ +/* $Id: php_libxml.h,v 1.7 2004/01/10 13:23:58 helly Exp $ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H @@ -42,7 +42,7 @@ typedef struct { zval *stream_context; - smart_str *error_buffer; + smart_str error_buffer; } php_libxml_globals; typedef struct _php_libxml_ref_obj { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
rrichards Fri Dec 12 08:54:07 2003 EDT Modified files: /php-src/ext/libxml php_libxml.h libxml.c Log: consolidate error handling Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.4 php-src/ext/libxml/php_libxml.h:1.5 --- php-src/ext/libxml/php_libxml.h:1.4 Tue Dec 9 16:55:02 2003 +++ php-src/ext/libxml/php_libxml.h Fri Dec 12 08:54:06 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_libxml.h,v 1.4 2003/12/09 21:55:02 rrichards Exp $ */ +/* $Id: php_libxml.h,v 1.5 2003/12/12 13:54:06 rrichards Exp $ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H @@ -73,6 +73,9 @@ void php_libxml_node_free_resource(xmlNodePtr node TSRMLS_DC); /* When object dtor is called as node may still be referenced */ void php_libxml_node_decrement_resource(php_libxml_node_object *object TSRMLS_DC); +void php_libxml_error_handler(void *ctx, const char *msg, ...); +void php_libxml_ctx_warning(void *ctx, const char *msg, ...); +void php_libxml_ctx_error(void *ctx, const char *msg, ...); #endif /* HAVE_LIBXML */ Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.10 php-src/ext/libxml/libxml.c:1.11 --- php-src/ext/libxml/libxml.c:1.10Tue Dec 9 16:55:02 2003 +++ php-src/ext/libxml/libxml.c Fri Dec 12 08:54:06 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.10 2003/12/09 21:55:02 rrichards Exp $ */ +/* $Id: libxml.c,v 1.11 2003/12/12 13:54:06 rrichards Exp $ */ #define IS_EXT_MODULE @@ -43,6 +43,10 @@ #include php_libxml.h +#define PHP_LIBXML_ERROR 0 +#define PHP_LIBXML_CTX_ERROR 1 +#define PHP_LIBXML_CTX_WARNING 2 + /* a true global for initialization */ int _php_libxml_initialized = 0; @@ -294,22 +298,33 @@ return php_stream_close((php_stream*)context); } -static void php_libxml_error_handler(void *ctx, const char *msg, ...) +static void php_libxml_ctx_error_level(int level, void *ctx, const char *msg TSRMLS_DC) +{ + xmlParserCtxtPtr parser; + + parser = (xmlParserCtxtPtr) ctx; + + if (parser != NULL parser-input != NULL) { + if (parser-input-filename) { + php_error_docref(NULL TSRMLS_CC, level, %s in %s, line: %d, msg, parser-input-filename, parser-input-line); + } else { + php_error_docref(NULL TSRMLS_CC, level, %s in Entity, line: %d, msg, parser-input-line); + } + } +} + +static void php_libxml_internal_error_handler(int error_type, void *ctx, const char **msg, va_list ap) { - va_list ap; char *buf; int len, len_iter, output = 0; TSRMLS_FETCH(); - va_start(ap, msg); - len = vspprintf(buf, 0, msg, ap); - va_end(ap); - + len = vspprintf(buf, 0, *msg, ap); len_iter = len; /* remove any trailing \n */ - while (len buf[--len_iter] == '\n') { + while (len_iter buf[--len_iter] == '\n') { buf[len_iter] = '\0'; output = 1; } @@ -319,12 +334,46 @@ efree(buf); if (output == 1) { - php_error(E_WARNING, %s, (char *) LIBXML(error_buffer)); + switch (error_type) { + case PHP_LIBXML_CTX_ERROR: + php_libxml_ctx_error_level(E_WARNING, ctx, (char *) LIBXML(error_buffer) TSRMLS_CC); + break; + case PHP_LIBXML_CTX_WARNING: + php_libxml_ctx_error_level(E_NOTICE, ctx, (char *) LIBXML(error_buffer) TSRMLS_CC); + break; + default: + php_error(E_WARNING, %s, (char *) LIBXML(error_buffer)); + } smart_str_free(LIBXML(error_buffer)); LIBXML(error_buffer) = NULL; } } +void php_libxml_ctx_error(void *ctx, const char *msg, ...) +{ + va_list args; + va_start(args, msg); + php_libxml_internal_error_handler(PHP_LIBXML_CTX_ERROR, ctx, msg, args); + va_end(args); +} + +void php_libxml_ctx_warning(void *ctx, const char *msg, ...) +{ + va_list args; + va_start(args, msg); + php_libxml_internal_error_handler(PHP_LIBXML_CTX_WARNING, ctx, msg, args); + va_end(args); +} + +void php_libxml_error_handler(void *ctx, const char *msg, ...) +{ + va_list args; + va_start(args, msg); + php_libxml_internal_error_handler(PHP_LIBXML_ERROR, ctx, msg, args); + va_end(args); +} + + PHP_LIBXML_API void php_libxml_initialize() { if (!_php_libxml_initialized) { /* we should be the only one's to ever init!! */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
rrichards Tue Dec 9 16:55:03 2003 EDT Modified files: /php-src/ext/libxml libxml.c php_libxml.h Log: buffer error messages until newline is hit Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.9 php-src/ext/libxml/libxml.c:1.10 --- php-src/ext/libxml/libxml.c:1.9 Fri Nov 28 18:25:25 2003 +++ php-src/ext/libxml/libxml.c Tue Dec 9 16:55:02 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.9 2003/11/28 23:25:25 pollita Exp $ */ +/* $Id: libxml.c,v 1.10 2003/12/09 21:55:02 rrichards Exp $ */ #define IS_EXT_MODULE @@ -221,6 +221,7 @@ static void php_libxml_init_globals(php_libxml_globals *libxml_globals_p TSRMLS_DC) { LIBXML(stream_context) = NULL; + LIBXML(error_buffer) = NULL; } #endif @@ -297,19 +298,31 @@ { va_list ap; char *buf; - int len; + int len, len_iter, output = 0; + + TSRMLS_FETCH(); va_start(ap, msg); len = vspprintf(buf, 0, msg, ap); va_end(ap); - + + len_iter = len; + /* remove any trailing \n */ - while (len buf[--len] == '\n') { - buf[len] = '\0'; + while (len buf[--len_iter] == '\n') { + buf[len_iter] = '\0'; + output = 1; } - php_error(E_WARNING, %s, buf); + smart_str_appendl(LIBXML(error_buffer), buf, len); + efree(buf); + + if (output == 1) { + php_error(E_WARNING, %s, (char *) LIBXML(error_buffer)); + smart_str_free(LIBXML(error_buffer)); + LIBXML(error_buffer) = NULL; + } } PHP_LIBXML_API void php_libxml_initialize() { @@ -357,6 +370,7 @@ ts_allocate_id(libxml_globals_id, sizeof(php_libxml_globals), (ts_allocate_ctor) php_libxml_init_globals, NULL); #else LIBXML(stream_context) = NULL; + LIBXML(error_buffer) = NULL; #endif return SUCCESS; @@ -378,6 +392,10 @@ PHP_RSHUTDOWN_FUNCTION(libxml) { + if (LIBXML(error_buffer)) { + smart_str_free(LIBXML(error_buffer)); + LIBXML(error_buffer) = NULL; + } return SUCCESS; } Index: php-src/ext/libxml/php_libxml.h diff -u php-src/ext/libxml/php_libxml.h:1.3 php-src/ext/libxml/php_libxml.h:1.4 --- php-src/ext/libxml/php_libxml.h:1.3 Sun Oct 26 10:53:20 2003 +++ php-src/ext/libxml/php_libxml.h Tue Dec 9 16:55:02 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_libxml.h,v 1.3 2003/10/26 15:53:20 rrichards Exp $ */ +/* $Id: php_libxml.h,v 1.4 2003/12/09 21:55:02 rrichards Exp $ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H @@ -37,10 +37,12 @@ #define PHP_LIBXML_API #endif +#include ext/standard/php_smart_str.h #include libxml/tree.h typedef struct { zval *stream_context; + smart_str *error_buffer; } php_libxml_globals; typedef struct _php_libxml_ref_obj { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/libxml libxml.c php_libxml.h
rrichards Sun Oct 26 10:53:20 2003 EDT Modified files: /php-src/ext/libxml libxml.c php_libxml.h Log: common functions for interoperability Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.6 php-src/ext/libxml/libxml.c:1.7 --- php-src/ext/libxml/libxml.c:1.6 Mon Oct 20 11:33:40 2003 +++ php-src/ext/libxml/libxml.c Sun Oct 26 10:53:20 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.6 2003/10/20 15:33:40 moriyoshi Exp $ */ +/* $Id: libxml.c,v 1.7 2003/10/26 15:53:20 rrichards Exp $ */ #define IS_EXT_MODULE @@ -91,6 +91,131 @@ /* }}} */ +/* {{{ internal functions for interoperability */ +static int php_libxml_dec_node(php_libxml_node_ptr *nodeptr) +{ + int ret_refcount; + + ret_refcount = --nodeptr-refcount; + if (ret_refcount == 0) { + if (nodeptr-node != NULL nodeptr-node-type != XML_DOCUMENT_NODE) { + nodeptr-node-_private = NULL; + } + /* node is destroyed by another object. reset ret_refcount to 1 and node to NULL + so the php_libxml_node_ptr is detroyed when the object is destroyed */ + nodeptr-refcount = 1; + nodeptr-node = NULL; + } + + return ret_refcount; +} + +static int php_libxml_clear_object(php_libxml_node_object *object TSRMLS_DC) +{ + if (object-properties) { + object-properties = NULL; + } + php_libxml_decrement_node_ptr(object TSRMLS_CC); + return php_libxml_decrement_doc_ref(object TSRMLS_CC); +} + +static int php_libxml_unregister_node(xmlNodePtr nodep TSRMLS_DC) +{ + php_libxml_node_object *wrapper; + + php_libxml_node_ptr *nodeptr = nodep-_private; + + if (nodeptr != NULL) { + wrapper = nodeptr-_private; + if (wrapper) { + php_libxml_clear_object(wrapper TSRMLS_CC); + } else { + php_libxml_dec_node(nodeptr); + } + } + + return -1; +} + +static void php_libxml_node_free(xmlNodePtr node) +{ + if(node) { + if (node-_private != NULL) { + ((php_libxml_node_ptr *) node-_private)-node = NULL; + } + switch (node-type) { + case XML_ATTRIBUTE_NODE: + xmlFreeProp((xmlAttrPtr) node); + break; + case XML_ENTITY_DECL: + case XML_ELEMENT_DECL: + case XML_ATTRIBUTE_DECL: + break; + case XML_NOTATION_NODE: + /* These require special handling */ + if (node-name != NULL) { + xmlFree((char *) node-name); + } + if (((xmlEntityPtr) node)-ExternalID != NULL) { + xmlFree((char *) ((xmlEntityPtr) node)-ExternalID); + } + if (((xmlEntityPtr) node)-SystemID != NULL) { + xmlFree((char *) ((xmlEntityPtr) node)-SystemID); + } + xmlFree(node); + break; + case XML_NAMESPACE_DECL: + if (node-ns) { + xmlFreeNs(node-ns); + node-ns = NULL; + } + node-type = XML_ELEMENT_NODE; + default: + xmlFreeNode(node); + } + } +} + +static void php_libxml_node_free_list(xmlNodePtr node TSRMLS_DC) +{ + xmlNodePtr curnode; + + if (node != NULL) { + curnode = node; + while (curnode != NULL) { + node = curnode; + switch (node-type) { + /* Skip property freeing for the following types */ + case XML_NOTATION_NODE: + break; + case XML_ENTITY_REF_NODE: + php_libxml_node_free_list((xmlNodePtr) node-properties TSRMLS_CC); + break; + case XML_ATTRIBUTE_DECL: + case XML_DTD_NODE: + case XML_DOCUMENT_TYPE_NODE: + case XML_ENTITY_DECL: + case XML_ATTRIBUTE_NODE: + case XML_NAMESPACE_DECL: +