1
0
mirror of https://github.com/php/php-src.git synced 2026-03-28 02:02:32 +01:00

fix crash setting attr from foreign doc (throws exception)

add test
This commit is contained in:
Rob Richards
2005-10-27 23:49:38 +00:00
parent 4329fff15f
commit a953be4fff
2 changed files with 112 additions and 0 deletions

View File

@@ -368,6 +368,11 @@ PHP_FUNCTION(dom_element_set_attribute_node)
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 @@ PHP_FUNCTION(dom_element_set_attribute_node_ns)
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);

View File

@@ -0,0 +1,102 @@
--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)
}