]> granicus.if.org Git - php/commitdiff
Fixed #67474 (getElementsByTagNameNS and default namespace)
authorArnout Boks <arnoutboks@gmail.com>
Mon, 2 Jan 2017 10:47:49 +0000 (11:47 +0100)
committerJoe Watkins <krakjoe@php.net>
Mon, 2 Jan 2017 11:56:37 +0000 (11:56 +0000)
This bug was caused by the fact that dom_get_elements_by_tag_name_ns_raw
uses an empty string to filter on the default namespace (as NULL means
'no filter'), whereas in the node itself the default namespace is
signalled by nodep->ns being null.

ext/dom/php_dom.c

index 9984356c30a41af8968376642467a5ad02b61c2f..fa2133bd0d69757ecf9ee980b0092a2001d4d75b 100644 (file)
@@ -1345,7 +1345,7 @@ xmlNode *dom_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, char *l
        while (nodep != NULL && (*cur <= index || index == -1)) {
                if (nodep->type == XML_ELEMENT_NODE) {
                        if (xmlStrEqual(nodep->name, (xmlChar *)local) || xmlStrEqual((xmlChar *)"*", (xmlChar *)local)) {
-                               if (ns == NULL || (nodep->ns != NULL && (xmlStrEqual(nodep->ns->href, (xmlChar *)ns) || xmlStrEqual((xmlChar *)"*", (xmlChar *)ns)))) {
+                               if (ns == NULL || (!strcmp(ns, "") && nodep->ns == NULL) || (nodep->ns != NULL && (xmlStrEqual(nodep->ns->href, (xmlChar *)ns) || xmlStrEqual((xmlChar *)"*", (xmlChar *)ns)))) {
                                        if (*cur == index) {
                                                ret = nodep;
                                                break;