rrichards Thu Oct 27 19:51:22 2005 EDT Added files: (Branch: PHP_5_1) /php-src/ext/dom/tests dom_set_attr_node.phpt
Modified files: /php-src/ext/dom element.c Log: MFH: fix crash setting attr from foreign doc (throws exception) add test http://cvs.php.net/diff.php/php-src/ext/dom/element.c?r1=1.36.2.1&r2=1.36.2.2&ty=u Index: php-src/ext/dom/element.c diff -u php-src/ext/dom/element.c:1.36.2.1 php-src/ext/dom/element.c:1.36.2.2 --- php-src/ext/dom/element.c:1.36.2.1 Sun Aug 28 12:23:25 2005 +++ php-src/ext/dom/element.c Thu Oct 27 19:51:22 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: element.c,v 1.36.2.1 2005/08/28 16:23:25 rrichards Exp $ */ +/* $Id: element.c,v 1.36.2.2 2005/10/27 23:51:22 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -368,6 +368,11 @@ RETURN_FALSE; } + if (!(attrp->doc == NULL || attrp->doc == nodep->doc)) { + php_dom_throw_error(WRONG_DOCUMENT_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); + RETURN_FALSE; + } + existattrp = xmlHasProp(nodep, attrp->name); if (existattrp != NULL && existattrp->type != XML_ATTRIBUTE_DECL) { if ((oldobj = php_dom_object_get_data((xmlNodePtr) existattrp)) != NULL && @@ -769,6 +774,11 @@ RETURN_FALSE; } + if (!(attrp->doc == NULL || attrp->doc == nodep->doc)) { + php_dom_throw_error(WRONG_DOCUMENT_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); + RETURN_FALSE; + } + nsp = attrp->ns; if (nsp != NULL) { existattrp = xmlHasNsProp(nodep, nsp->href, attrp->name); http://cvs.php.net/co.php/php-src/ext/dom/tests/dom_set_attr_node.phpt?r=1.1&p=1 Index: php-src/ext/dom/tests/dom_set_attr_node.phpt +++ php-src/ext/dom/tests/dom_set_attr_node.phpt --TEST-- Test: setAttributeNode() --SKIPIF-- <?php require_once('skipif.inc'); ?> --FILE-- <?php $xml = <<<HERE <?xml version="1.0" ?> <root a="b" /> HERE; $xml2 = <<<HERE <?xml version="1.0" ?> <doc2 /> HERE; $dom = new DOMDocument(); $dom->loadXML($xml); $root = $dom->documentElement; $attr = $root->getAttributeNode('a'); $dom2 = new DOMDocument(); $dom2->loadXML($xml2); $root2 = $dom2->documentElement; try { $root2->setAttributeNode($attr); } catch (domexception $e) { var_dump($e); } ?> --EXPECTF-- object(DOMException)#%d (6) { ["message":protected]=> string(20) "Wrong Document Error" ["string":"Exception":private]=> string(0) "" ["file":protected]=> string(%d) "%sdom_set_attr_node.php" ["line":protected]=> int(22) ["trace":"Exception":private]=> array(1) { [0]=> array(6) { ["file"]=> string(%d) "%sdom_set_attr_node.php" ["line"]=> int(22) ["function"]=> string(16) "setAttributeNode" ["class"]=> string(10) "DOMElement" ["type"]=> string(2) "->" ["args"]=> array(1) { [0]=> object(DOMAttr)#%d (0) { } } } } ["code"]=> int(4) } --UEXPECTF-- object(DOMException)#%d (6) { [u"message":protected]=> unicode(20) "Wrong Document Error" [u"string":u"Exception":private]=> unicode(0) "" [u"file":protected]=> unicode(%d) "%sdom_set_attr_node.php" [u"line":protected]=> int(22) [u"trace":u"Exception":private]=> array(1) { [0]=> array(6) { [u"file"]=> unicode(%d) "%sdom_set_attr_node.php" [u"line"]=> int(22) [u"function"]=> unicode(16) "setAttributeNode" [u"class"]=> unicode(10) "DOMElement" [u"type"]=> unicode(2) "->" [u"args"]=> array(1) { [0]=> object(DOMAttr)#%d (0) { } } } } ["code"]=> int(4) } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php