]> granicus.if.org Git - php/commitdiff
Make getElementsByTagNameNS $namespace nullable
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 9 Feb 2021 11:19:44 +0000 (12:19 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 9 Feb 2021 11:19:44 +0000 (12:19 +0100)
According to the DOM specification, this argument is supposed to
be nullable.

ext/dom/document.c
ext/dom/element.c
ext/dom/php_dom.stub.php
ext/dom/php_dom_arginfo.h
ext/dom/tests/bug67474.phpt

index c6d0f723f89cb1270b3e28e368e66ba3a39141f4..dbbabb8bffde6743fa9d9c1008fbd26ab795e39e 100644 (file)
@@ -986,7 +986,7 @@ PHP_METHOD(DOMDocument, getElementsByTagNameNS)
        xmlChar *local, *nsuri;
 
        id = ZEND_THIS;
-       if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &uri, &uri_len, &name, &name_len) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS(), "s!s", &uri, &uri_len, &name, &name_len) == FAILURE) {
                RETURN_THROWS();
        }
 
@@ -995,7 +995,7 @@ PHP_METHOD(DOMDocument, getElementsByTagNameNS)
        php_dom_create_iterator(return_value, DOM_NODELIST);
        namednode = Z_DOMOBJ_P(return_value);
        local = xmlCharStrndup(name, name_len);
-       nsuri = xmlCharStrndup(uri, uri_len);
+       nsuri = xmlCharStrndup(uri ? uri : "", uri_len);
        dom_namednode_iter(intern, 0, namednode, NULL, local, nsuri);
 }
 /* }}} end dom_document_get_elements_by_tag_name_ns */
index 317619001beea8b9b237a9f7a86a101bcfbe411a..450d694c41d7f10af5f354c0ab2a38524a8d5747 100644 (file)
@@ -933,7 +933,7 @@ PHP_METHOD(DOMElement, getElementsByTagNameNS)
        xmlChar *local, *nsuri;
 
        id = ZEND_THIS;
-       if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &uri, &uri_len, &name, &name_len) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS(), "s!s", &uri, &uri_len, &name, &name_len) == FAILURE) {
                RETURN_THROWS();
        }
 
@@ -942,7 +942,7 @@ PHP_METHOD(DOMElement, getElementsByTagNameNS)
        php_dom_create_iterator(return_value, DOM_NODELIST);
        namednode = Z_DOMOBJ_P(return_value);
        local = xmlCharStrndup(name, name_len);
-       nsuri = xmlCharStrndup(uri, uri_len);
+       nsuri = xmlCharStrndup(uri ? uri : "", uri_len);
        dom_namednode_iter(intern, 0, namednode, NULL, local, nsuri);
 
 }
index cdc6b9984697616a9102becd3ed80252dbb7f617..b303caf93ff6fcc637435fcce99dbbcdaadce0f1 100644 (file)
@@ -190,7 +190,7 @@ class DOMElement implements DOMParentNode, DOMChildNode
     public function getElementsByTagName(string $qualifiedName) {}
 
     /** @return DOMNodeList */
-    public function getElementsByTagNameNS(string $namespace, string $localName) {}
+    public function getElementsByTagNameNS(?string $namespace, string $localName) {}
 
     /** @return bool */
     public function hasAttribute(string $qualifiedName) {}
@@ -287,7 +287,7 @@ class DOMDocument implements DOMParentNode
     public function getElementsByTagName(string $qualifiedName) {}
 
     /** @return DOMNodeList */
-    public function getElementsByTagNameNS(string $namespace, string $localName) {}
+    public function getElementsByTagNameNS(?string $namespace, string $localName) {}
 
     /** @return DOMNode|false */
     public function importNode(DOMNode $node, bool $deep = false) {}
index 844d2b9186735a63648b6194449ec6b66b13f9c2..22944d296ca936877c4f3d9ab994a9bb6c6aa66c 100644 (file)
@@ -1,5 +1,5 @@
 /* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 7cba1a7a34cc4789871faf44fc4794a48db26e61 */
+ * Stub hash: 72c2add8db9af8f90e84997a2a5ca6743268fae8 */
 
 ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_dom_import_simplexml, 0, 1, DOMElement, 1)
        ZEND_ARG_TYPE_INFO(0, node, IS_OBJECT, 0)
@@ -184,10 +184,7 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_class_DOMElement_getElementsByTagName arginfo_class_DOMElement_getAttribute
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DOMElement_getElementsByTagNameNS, 0, 0, 2)
-       ZEND_ARG_TYPE_INFO(0, namespace, IS_STRING, 0)
-       ZEND_ARG_TYPE_INFO(0, localName, IS_STRING, 0)
-ZEND_END_ARG_INFO()
+#define arginfo_class_DOMElement_getElementsByTagNameNS arginfo_class_DOMElement_getAttributeNS
 
 #define arginfo_class_DOMElement_hasAttribute arginfo_class_DOMElement_getAttribute
 
@@ -292,7 +289,7 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_class_DOMDocument_getElementsByTagName arginfo_class_DOMElement_getAttribute
 
-#define arginfo_class_DOMDocument_getElementsByTagNameNS arginfo_class_DOMElement_getElementsByTagNameNS
+#define arginfo_class_DOMDocument_getElementsByTagNameNS arginfo_class_DOMElement_getAttributeNS
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DOMDocument_importNode, 0, 0, 1)
        ZEND_ARG_OBJ_INFO(0, node, DOMNode, 0)
index 953127fa0b1d57669b83eff4faaf44117664a71d..16c2aad1524362e240766738bfb86463cd8a1339 100644 (file)
@@ -6,13 +6,24 @@ require_once('skipif.inc');
 ?>
 --FILE--
 <?php
+declare(strict_types=1);
+
 $doc = new DOMDocument();
 $doc->loadXML('<root xmlns:x="x"><a/><x:a/></root>');
 $list = $doc->getElementsByTagNameNS('', 'a');
 var_dump($list->length);
 $list = $doc->getElementsByTagNameNS(null, 'a');
 var_dump($list->length);
+
+$elem = $doc->documentElement;
+$list = $elem->getElementsByTagNameNS('', 'a');
+var_dump($list->length);
+$list = $elem->getElementsByTagNameNS(null, 'a');
+var_dump($list->length);
+
 ?>
 --EXPECT--
 int(1)
 int(1)
+int(1)
+int(1)