rrichards Mon Aug 28 23:36:23 2006 UTC Added files: (Branch: PHP_5_2) /php-src/ext/dom/tests bug38474.phpt
Modified files: /php-src/ext/dom element.c Log: fix #38474 (getAttribute select attribute by order, even when prefixed) add test http://cvs.php.net/viewvc.cgi/php-src/ext/dom/element.c?r1=1.36.2.4.2.2&r2=1.36.2.4.2.3&diff_format=u Index: php-src/ext/dom/element.c diff -u php-src/ext/dom/element.c:1.36.2.4.2.2 php-src/ext/dom/element.c:1.36.2.4.2.3 --- php-src/ext/dom/element.c:1.36.2.4.2.2 Tue Jun 13 20:19:37 2006 +++ php-src/ext/dom/element.c Mon Aug 28 23:36:23 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: element.c,v 1.36.2.4.2.2 2006/06/13 20:19:37 iliaa Exp $ */ +/* $Id: element.c,v 1.36.2.4.2.3 2006/08/28 23:36:23 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -188,7 +188,24 @@ /* }}} */ - +static xmlAttrPtr dom_get_dom1_attribute(xmlNodePtr elem, xmlChar *name) { + int len; + const xmlChar *nqname; + + nqname = xmlSplitQName3(name, &len); + if (nqname != NULL) { + xmlNsPtr ns; + xmlChar *prefix = xmlStrndup(name, len); + ns = xmlSearchNs(elem->doc, elem, prefix); + if (prefix != NULL) { + xmlFree(prefix); + } + if (ns != NULL) { + return xmlHasNsProp(elem, nqname, ns->href); + } + } + return xmlHasNsProp(elem, name, NULL); +} /* {{{ proto string dom_element_get_attribute(string name); URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 @@ -198,8 +215,9 @@ { zval *id; xmlNode *nodep; - char *name, *value; + char *name, *value = NULL; dom_object *intern; + xmlAttrPtr attr; int name_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_element_class_entry, &name, &name_len) == FAILURE) { @@ -208,7 +226,15 @@ DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - value = xmlGetProp(nodep, name); + attr = dom_get_dom1_attribute(nodep, (xmlChar *)name); + if (attr) { + if (attr->type == XML_ATTRIBUTE_NODE) { + value = xmlNodeListGetString(attr->doc, attr->children, 1); + } else { + value = xmlStrdup(((xmlAttributePtr)attr)->defaultValue); + } + } + if (value == NULL) { RETURN_EMPTY_STRING(); } else { @@ -232,7 +258,6 @@ dom_object *intern; char *name, *value; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_element_class_entry, &name, &name_len, &value, &value_len) == FAILURE) { return; } @@ -249,7 +274,7 @@ RETURN_FALSE; } - attr = xmlHasProp(nodep,name); + attr = dom_get_dom1_attribute(nodep, (xmlChar *)name); if (attr != NULL && attr->type != XML_ATTRIBUTE_DECL) { node_list_unlink(attr->children TSRMLS_CC); } @@ -289,7 +314,7 @@ RETURN_FALSE; } - attrp = xmlHasProp(nodep,name); + attrp = dom_get_dom1_attribute(nodep, (xmlChar *)name); if (attrp == NULL) { RETURN_FALSE; } @@ -328,7 +353,7 @@ DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - attrp = xmlHasProp(nodep,name); + attrp = dom_get_dom1_attribute(nodep, (xmlChar *)name); if (attrp == NULL) { RETURN_FALSE; } @@ -852,8 +877,9 @@ zval *id; xmlNode *nodep; dom_object *intern; - char *name, *value; + char *name; int name_len; + xmlAttrPtr attr; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_element_class_entry, &name, &name_len) == FAILURE) { return; @@ -861,11 +887,10 @@ DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - value = xmlGetProp(nodep, name); - if (value == NULL) { + attr = dom_get_dom1_attribute(nodep, (xmlChar *)name); + if (attr == NULL) { RETURN_FALSE; } else { - xmlFree(value); RETURN_TRUE; } } http://cvs.php.net/viewvc.cgi/php-src/ext/dom/tests/bug38474.phpt?view=markup&rev=1.1 Index: php-src/ext/dom/tests/bug38474.phpt +++ php-src/ext/dom/tests/bug38474.phpt -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php