[PHP-CVS] cvs: php-src(PHP_5_2) /ext/libxml libxml.c /ext/libxml/tests bug42112.phpt

2007-07-28 Thread Rob Richards
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

2007-07-28 Thread Rob Richards
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

2007-07-28 Thread Rob Richards
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

2007-07-28 Thread Rob Richards
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