Browse Source

Fix bug #72971

pull/2110/head
Nikita Popov 9 years ago
parent
commit
07cc6a6ba2
  1. 3
      NEWS
  2. 4
      ext/simplexml/simplexml.c
  3. 21
      ext/simplexml/tests/bug72971.phpt

3
NEWS

@ -76,6 +76,9 @@ PHP NEWS
. Fixed bug #72940 (SID always return "name=ID", even if session
cookie exist). (Yasuo)
- SimpleXML:
. Fixed bug #72971 (SimpleXML isset/unset do not respect namespace). (Nikita)
- Standard:
. Fixed bug #55451 (substr_compare NULL length interpreted as 0). (Lauri
Kenttä)

4
ext/simplexml/simplexml.c

@ -807,7 +807,7 @@ static int sxe_prop_dim_exists(zval *object, zval *member, int check_empty, zend
while (node) {
xmlNodePtr nnext;
nnext = node->next;
if ((node->type == XML_ELEMENT_NODE) && !xmlStrcmp(node->name, (xmlChar *)Z_STRVAL_P(member))) {
if (node->type == XML_ELEMENT_NODE && !xmlStrcmp(node->name, (xmlChar *)Z_STRVAL_P(member)) && match_ns(sxe, node, sxe->iter.nsprefix, sxe->iter.isprefix)) {
break;
}
node = nnext;
@ -937,7 +937,7 @@ static void sxe_prop_dim_delete(zval *object, zval *member, zend_bool elements,
SKIP_TEXT(node);
if (!xmlStrcmp(node->name, (xmlChar *)Z_STRVAL_P(member))) {
if (!xmlStrcmp(node->name, (xmlChar *)Z_STRVAL_P(member)) && match_ns(sxe, node, sxe->iter.nsprefix, sxe->iter.isprefix)) {
xmlUnlinkNode(node);
php_libxml_node_free_resource(node);
}

21
ext/simplexml/tests/bug72971.phpt

@ -0,0 +1,21 @@
--TEST--
Bug #72971: SimpleXML isset/unset do not respect namespace
--SKIPIF--
<?php if (!extension_loaded("simplexml")) print "skip simplexml extension is not loaded"; ?>
--FILE--
<?php
$xml = new SimpleXMLElement('<root xmlns:ns="ns"><foo>bar</foo><ns:foo>ns:bar</ns:foo><ns:foo2>ns:bar2</ns:foo2></root>');
var_dump(isset($xml->foo2));
unset($xml->foo);
var_dump($xml->children('ns'));
?>
--EXPECT--
bool(false)
object(SimpleXMLElement)#2 (2) {
["foo"]=>
string(6) "ns:bar"
["foo2"]=>
string(7) "ns:bar2"
}
Loading…
Cancel
Save