[PHP-CVS] cvs: php-src(PHP_5_2) /ext/libxml libxml.c /ext/libxml/tests bug42112.phpt
rrichards Sat Jul 28 08:32:51 2007 UTC Added files: (Branch: PHP_5_2) /php-src/ext/libxml/tests bug42112.phpt Modified files: /php-src/ext/libxml libxml.c Log: Fixed Bug #42112 (deleting a node produces memory corruption) add test http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/libxml.c?r1=1.32.2.7.2.13r2=1.32.2.7.2.14diff_format=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.32.2.7.2.13 php-src/ext/libxml/libxml.c:1.32.2.7.2.14 --- php-src/ext/libxml/libxml.c:1.32.2.7.2.13 Sat Jul 21 00:51:17 2007 +++ php-src/ext/libxml/libxml.c Sat Jul 28 08:32:49 2007 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.32.2.7.2.13 2007/07/21 00:51:17 jani Exp $ */ +/* $Id: libxml.c,v 1.32.2.7.2.14 2007/07/28 08:32:49 rrichards Exp $ */ #define IS_EXT_MODULE @@ -240,11 +240,14 @@ case XML_ENTITY_REF_NODE: php_libxml_node_free_list((xmlNodePtr) node-properties TSRMLS_CC); break; + case XML_ATTRIBUTE_NODE: + if ((node-doc != NULL) (((xmlAttrPtr) node)-atype == XML_ATTRIBUTE_ID)) { + xmlRemoveID(node-doc, (xmlAttrPtr) node); + } 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: case XML_TEXT_NODE: php_libxml_node_free_list(node-children TSRMLS_CC); http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/tests/bug42112.phpt?view=markuprev=1.1 Index: php-src/ext/libxml/tests/bug42112.phpt +++ php-src/ext/libxml/tests/bug42112.phpt -- 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 /ext/libxml/tests bug42112.phpt
rrichards Sat Jul 28 08:34:10 2007 UTC Modified files: /php-src/ext/libxml libxml.c /php-src/ext/libxml/tests bug42112.phpt Log: MFB: Fixed Bug #42112 (deleting a node produces memory corruption) add test http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/libxml.c?r1=1.61r2=1.62diff_format=u Index: php-src/ext/libxml/libxml.c diff -u php-src/ext/libxml/libxml.c:1.61 php-src/ext/libxml/libxml.c:1.62 --- php-src/ext/libxml/libxml.c:1.61Sat Jul 21 00:49:53 2007 +++ php-src/ext/libxml/libxml.c Sat Jul 28 08:34:09 2007 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: libxml.c,v 1.61 2007/07/21 00:49:53 jani Exp $ */ +/* $Id: libxml.c,v 1.62 2007/07/28 08:34:09 rrichards Exp $ */ #define IS_EXT_MODULE @@ -240,11 +240,14 @@ case XML_ENTITY_REF_NODE: php_libxml_node_free_list((xmlNodePtr) node-properties TSRMLS_CC); break; + case XML_ATTRIBUTE_NODE: + if ((node-doc != NULL) (((xmlAttrPtr) node)-atype == XML_ATTRIBUTE_ID)) { + xmlRemoveID(node-doc, (xmlAttrPtr) node); + } 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: case XML_TEXT_NODE: php_libxml_node_free_list(node-children TSRMLS_CC); http://cvs.php.net/viewvc.cgi/php-src/ext/libxml/tests/bug42112.phpt?r1=1.1r2=1.2diff_format=u Index: php-src/ext/libxml/tests/bug42112.phpt diff -u /dev/null php-src/ext/libxml/tests/bug42112.phpt:1.2 --- /dev/null Sat Jul 28 08:34:10 2007 +++ php-src/ext/libxml/tests/bug42112.phpt Sat Jul 28 08:34:09 2007 @@ -0,0 +1,31 @@ +--TEST-- +Bug #42112 (deleting a node produces memory corruption) +--SKIPIF-- +?php if (!extension_loaded('dom')) die('skip'); ? +--FILE-- +?php +$xml = EOXML +rootchild xml:id=id1baz/child/root +EOXML; + +function remove_node($doc) { +$node = $doc-getElementById( 'id1' ); +print 'Deleting Node: '.$node-nodeName.\n; +$node-parentNode-removeChild( $node ); +} + +$doc = new DOMDocument(); +$doc-loadXML($xml); + +remove_node($doc); + +$node = $doc-getElementById( 'id1' ); +if ($node) { + print 'Found Node: '.$node-nodeName.\n; +} +$root = $doc-documentElement; +print 'Root Node: '.$root-nodeName.\n; +? +--EXPECT-- +Deleting Node: child +Root Node: root -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_2) / NEWS
rrichards Sat Jul 28 08:35:11 2007 UTC Modified files: (Branch: PHP_5_2) /php-srcNEWS Log: BFN http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.862r2=1.2027.2.547.2.863diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.862 php-src/NEWS:1.2027.2.547.2.863 --- php-src/NEWS:1.2027.2.547.2.862 Thu Jul 26 15:24:05 2007 +++ php-src/NEWSSat Jul 28 08:35:09 2007 @@ -70,6 +70,7 @@ - Fixed PECL bug #11216 (crash in ZipArchive::addEmptyDir when a directory already exists). (Pierre) +- Fixed Bug #42112 (deleting a node produces memory corruption). (Rob) - Fixed Bug #42107 (sscanf broken when using %2$s format parameters). (Jani) - Fixed bug #42090 (json_decode causes segmentation fault). (Hannes) - Fixed bug #42072 (No warning message for clearstatcache() with arguments). -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/xsl xsltprocessor.c
rrichards Sat Jul 28 09:16:16 2007 UTC Modified files: /php-src/ext/xslxsltprocessor.c Log: allow user specified class to be returned from transformToDoc http://cvs.php.net/viewvc.cgi/php-src/ext/xsl/xsltprocessor.c?r1=1.55r2=1.56diff_format=u Index: php-src/ext/xsl/xsltprocessor.c diff -u php-src/ext/xsl/xsltprocessor.c:1.55 php-src/ext/xsl/xsltprocessor.c:1.56 --- php-src/ext/xsl/xsltprocessor.c:1.55Mon Jan 1 09:29:34 2007 +++ php-src/ext/xsl/xsltprocessor.c Sat Jul 28 09:16:15 2007 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: xsltprocessor.c,v 1.55 2007/01/01 09:29:34 sebastian Exp $ */ +/* $Id: xsltprocessor.c,v 1.56 2007/07/28 09:16:15 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -506,21 +506,50 @@ zval *id, *rv = NULL, *docp = NULL; xmlDoc *newdocp; xsltStylesheetPtr sheetp; - int ret; + int ret, ret_class_len=0; + zstr ret_class = NULL_ZSTR; xsl_object *intern; + zend_uchar ret_class_type; id = getThis(); intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC); sheetp = (xsltStylesheetPtr) intern-ptr; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, o, docp) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, o|t!, docp, ret_class, ret_class_len, ret_class_type) == FAILURE) { RETURN_FALSE; } newdocp = php_xsl_apply_stylesheet(id, intern, sheetp, docp TSRMLS_CC); if (newdocp) { - DOM_RET_OBJ(rv, (xmlNodePtr) newdocp, ret, NULL); + if (ret_class_len 0) { + int found; + zstr curclass_name; + zend_class_entry *curce, **ce; + php_libxml_node_object *interndoc; + + curce = Z_OBJCE_P(docp); + curclass_name = curce-name; + while (curce-parent != NULL) { + curce = curce-parent; + } + + found = zend_u_lookup_class(ret_class_type, ret_class, ret_class_len, ce TSRMLS_CC); + if ((found != SUCCESS) || !instanceof_function(*ce, curce TSRMLS_CC)) { + xmlFreeDoc(newdocp); + php_error_docref(NULL TSRMLS_CC, E_WARNING, + Expecting class compatible with %v, '%v' given, curclass_name, ret_class); + RETURN_FALSE; + } + + object_init_ex(return_value, *ce); + + interndoc = (php_libxml_node_object *)zend_objects_get_address(return_value TSRMLS_CC); + php_libxml_increment_doc_ref(interndoc, newdocp TSRMLS_CC); + php_libxml_increment_node_ptr(interndoc, (xmlNodePtr)newdocp, (void *)interndoc TSRMLS_CC); + } else { + DOM_RET_OBJ(rv, (xmlNodePtr) newdocp, ret, NULL); + } } else { RETURN_FALSE; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php