From: Rob Richards Date: Sat, 16 Sep 2006 13:56:25 +0000 (+0000) Subject: MFB: implement workaround for bug #38823 (DOMComment->appendData does nothing) X-Git-Tag: RELEASE_1_0_0RC1~1653 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=49d8ec82fefa2b6cd930015055dd56efd0f3bf3f;p=php MFB: implement workaround for bug #38823 (DOMComment->appendData does nothing) fix bug #38850 (lookupNamespaceURI doesn't return default namespace) add test --- diff --git a/ext/dom/characterdata.c b/ext/dom/characterdata.c index 52169939d6..4abd1f148f 100644 --- a/ext/dom/characterdata.c +++ b/ext/dom/characterdata.c @@ -207,9 +207,19 @@ PHP_FUNCTION(dom_characterdata_append_data) } DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - +#if LIBXML_VERSION < 20627 +/* Implement logic from libxml xmlTextConcat to add suport for comments and PI */ + if ((nodep->content == (xmlChar *) &(nodep->properties)) || + ((nodep->doc != NULL) && (nodep->doc->dict != NULL) && + xmlDictOwns(nodep->doc->dict, nodep->content))) { + nodep->content = xmlStrncatNew(nodep->content, arg, arg_len); + } else { + nodep->content = xmlStrncat(nodep->content, arg, arg_len); + } + nodep->properties = NULL; +#else xmlTextConcat(nodep, arg, arg_len); - +#endif RETURN_TRUE; } /* }}} end dom_characterdata_append_data */ diff --git a/ext/dom/node.c b/ext/dom/node.c index 4583438742..67ac970498 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -1611,20 +1611,18 @@ PHP_FUNCTION(dom_node_lookup_namespace_uri) dom_object *intern; xmlNsPtr nsptr; int prefix_len = 0; - char *prefix; + char *prefix=NULL; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_node_class_entry, &prefix, &prefix_len, UG(utf8_conv)) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!&", &id, dom_node_class_entry, &prefix, &prefix_len, UG(utf8_conv)) == FAILURE) { return; } DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - if (prefix_len > 0) { - nsptr = xmlSearchNs(nodep->doc, nodep, prefix); - if (nsptr && nsptr->href != NULL) { - RETVAL_XML_STRING((char *) nsptr->href, ZSTR_DUPLICATE); - return; - } + nsptr = xmlSearchNs(nodep->doc, nodep, prefix); + if (nsptr && nsptr->href != NULL) { + RETVAL_XML_STRING((char *) nsptr->href, ZSTR_DUPLICATE); + return; } RETURN_NULL(); diff --git a/ext/dom/tests/bug38850.phpt b/ext/dom/tests/bug38850.phpt new file mode 100644 index 0000000000..2f5d84eb2b --- /dev/null +++ b/ext/dom/tests/bug38850.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug # 38850 (lookupNamespaceURI does not return default namespace) +--SKIPIF-- + +--FILE-- + + +HERE; + +$doc = new DOMDocument(); +$doc->loadXML($xml); + +$root = $doc->documentElement; + +print $root->lookupNamespaceURI(NULL); + + +?> +--EXPECT-- +http://www.example.com/ns/foo