]> granicus.if.org Git - php/commitdiff
Fixed bug #75451 (Assertion fails while foreach on empty xpath query)
authorXinchen Hui <laruence@gmail.com>
Sat, 28 Oct 2017 13:38:26 +0000 (21:38 +0800)
committerXinchen Hui <laruence@gmail.com>
Sat, 28 Oct 2017 13:38:26 +0000 (21:38 +0800)
ext/dom/tests/bug75451.phpt [new file with mode: 0644]
ext/dom/xpath.c

diff --git a/ext/dom/tests/bug75451.phpt b/ext/dom/tests/bug75451.phpt
new file mode 100644 (file)
index 0000000..dae7cde
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+Bug #75451 (Assertion fails while foreach on empty xpath query)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+?>
+--FILE--
+<?php
+$dom = new DOMDocument();
+$dom->loadXML('<root><child/></root>');
+$xpath = new DOMXpath($dom);
+foreach($xpath->query('/root/noexist') as $child) {
+       var_dump($child);
+}
+?>
+okey
+--EXPECT--
+okey
index f0b908ccf3fdc5fc4351166990e128bf3a9e4540..31e4dc98b4ffac8fabcafb7428a146b3a8a4ea72 100644 (file)
@@ -432,9 +432,8 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
                        int i;
                        xmlNodeSetPtr nodesetp;
 
+                       array_init(&retval);
                        if (xpathobjp->type == XPATH_NODESET && NULL != (nodesetp = xpathobjp->nodesetval) && nodesetp->nodeNr) {
-
-                               array_init(&retval);
                                for (i = 0; i < nodesetp->nodeNr; i++) {
                                        xmlNodePtr node = nodesetp->nodeTab[i];
                                        zval child;
@@ -460,8 +459,6 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
                                        php_dom_create_object(node, &child, &intern->dom);
                                        add_next_index_zval(&retval, &child);
                                }
-                       } else {
-                               ZVAL_EMPTY_ARRAY(&retval);
                        }
                        php_dom_create_interator(return_value, DOM_NODELIST);
                        nodeobj = Z_DOMOBJ_P(return_value);