summaryrefslogtreecommitdiff
path: root/ext/simplexml/simplexml.c
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2005-08-31 17:00:46 +0000
committerRob Richards <rrichards@php.net>2005-08-31 17:00:46 +0000
commitab78a633573c100582d863cafbbbc610304aadb9 (patch)
tree7d95d4b9949351ae3714fb5740ac49ce15e3cd37 /ext/simplexml/simplexml.c
parent2ec2739c1984ea616cfd62cfa147a4606e72c3e9 (diff)
downloadphp-git-ab78a633573c100582d863cafbbbc610304aadb9.tar.gz
MFH: make sxe_properties_get respect namespace scope
Diffstat (limited to 'ext/simplexml/simplexml.c')
-rw-r--r--ext/simplexml/simplexml.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index 224dee873d..8fbb01f4f8 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -633,7 +633,7 @@ static void sxe_dimension_delete(zval *object, zval *offset TSRMLS_DC)
/* {{{ _get_base_node_value()
*/
static void
-_get_base_node_value(php_sxe_object *sxe_ref, xmlNodePtr node, zval **value TSRMLS_DC)
+_get_base_node_value(php_sxe_object *sxe_ref, xmlNodePtr node, zval **value, char *prefix TSRMLS_DC)
{
php_sxe_object *subnode;
xmlChar *contents;
@@ -650,8 +650,10 @@ _get_base_node_value(php_sxe_object *sxe_ref, xmlNodePtr node, zval **value TSRM
subnode = php_sxe_object_new(sxe_ref->zo.ce TSRMLS_CC);
subnode->document = sxe_ref->document;
subnode->document->refcount++;
+ if (prefix) {
+ subnode->iter.nsprefix = xmlStrdup(prefix);
+ }
php_libxml_increment_node_ptr((php_libxml_node_object *)subnode, node, NULL TSRMLS_CC);
-
(*value)->type = IS_OBJECT;
(*value)->value.obj = php_sxe_register_object(subnode TSRMLS_CC);
/*zval_add_ref(value);*/
@@ -703,6 +705,10 @@ sxe_properties_get(zval *object TSRMLS_DC)
}
}
+ if (node->type == XML_ELEMENT_NODE && (! match_ns(sxe, node, sxe->iter.nsprefix))) {
+ goto next_iter;
+ }
+
name = (char *) node->name;
if (!name) {
goto next_iter;
@@ -710,7 +716,7 @@ sxe_properties_get(zval *object TSRMLS_DC)
namelen = xmlStrlen(node->name) + 1;
}
- _get_base_node_value(sxe, node, &value TSRMLS_CC);
+ _get_base_node_value(sxe, node, &value, sxe->iter.nsprefix TSRMLS_CC);
h = zend_hash_func(name, namelen);
if (zend_hash_quick_find(rv, name, namelen, h, (void **) &data_ptr) == SUCCESS) {