summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Schlossnagle <gschlossnagle@php.net>2004-03-24 05:04:26 +0000
committerGeorge Schlossnagle <gschlossnagle@php.net>2004-03-24 05:04:26 +0000
commitb9c04fe19a1355ed7c25f62fa42035089f4a569e (patch)
tree318f34b6619623713d457e4fbae587de1b9bd407
parentb12f5f7e457b120e330c5ac10ed9957a92a48cc0 (diff)
downloadphp-git-b9c04fe19a1355ed7c25f62fa42035089f4a569e.tar.gz
fixed non-existent elements check
ref: http://news.php.net/article.php?group=php.internals&article=8660
-rw-r--r--ext/simplexml/simplexml.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index c6f064f6bb..3fd0f2516a 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -511,7 +511,23 @@ static int sxe_prop_dim_exists(zval *object, zval *member, int check_empty, zend
}
node = sxe_get_element_by_offset(sxe, Z_LVAL_P(member), node);
}
-
+ else {
+ if (Z_TYPE_P(member) != IS_STRING) {
+ zval tmp_zv = *member;
+ zval_copy_ctor(&tmp_zv);
+ member = &tmp_zv;
+ convert_to_string(member);
+ }
+ node = node->children;
+ while (node) {
+ xmlNodePtr nnext;
+ nnext = node->next;
+ if (!xmlStrcmp(node->name, Z_STRVAL_P(member))) {
+ break;
+ }
+ node = nnext;
+ }
+ }
if (node) {
exists = 1;
}