From e1813b69c52fbe37834771bcab91eebe3a43738c Mon Sep 17 00:00:00 2001 From: Christian Stocker Date: Thu, 1 Sep 2011 13:42:45 +0000 Subject: [PATCH] Merge from Trunk simplexml->query returns empty array if no nodes were found and false if libxml thinks the xpath-expression was invalid. Behaves now the same like DomXPath and fixes Bug #48601 Adjusted a test to reflect that change --- NEWS | 6 ++++++ ext/simplexml/simplexml.c | 5 ++--- ext/simplexml/tests/008.phpt | 9 +++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 09d88dd7ff1..4dceba22286 100644 --- a/NEWS +++ b/NEWS @@ -26,6 +26,12 @@ PHP NEWS . Don't set $_SERVER['HTTPS'] on unsecure connection (bug #55403). (Uwe Schindler) +- SimpleXML: + . Reverted the SimpleXML->query() behaviour to returning empty arrays + instead of false when no nodes are found as it was since 5.3.3 + (bug #48601). (chregu, rrichards) + + 23 Aug 2011, PHP 5.3.8 - Core: diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index 9bb9af1a85c..c2697ba1707 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -1264,8 +1264,9 @@ SXE_METHOD(xpath) result = retval->nodesetval; + array_init(return_value); + if (result != NULL) { - array_init(return_value); for (i = 0; i < result->nodeNr; ++i) { nodeptr = result->nodeTab[i]; if (nodeptr->type == XML_TEXT_NODE || nodeptr->type == XML_ELEMENT_NODE || nodeptr->type == XML_ATTRIBUTE_NODE) { @@ -1286,8 +1287,6 @@ SXE_METHOD(xpath) add_next_index_zval(return_value, value); } } - } else { - RETVAL_FALSE; } xmlXPathFreeObject(retval); diff --git a/ext/simplexml/tests/008.phpt b/ext/simplexml/tests/008.phpt index 4fda204a2fe..8734ba4a463 100644 --- a/ext/simplexml/tests/008.phpt +++ b/ext/simplexml/tests/008.phpt @@ -25,7 +25,10 @@ EOF; $sxe = simplexml_load_string($xml); var_dump($sxe->xpath("elem1/elem2/elem3/elem4")); +//valid expression var_dump($sxe->xpath("***")); +//invalid expression +var_dump($sxe->xpath("**")); ?> --EXPECTF-- array(1) { @@ -36,4 +39,10 @@ array(1) { } } } +array(0) { +} + +Warning: SimpleXMLElement::xpath(): Invalid expression in %s on line %d + +Warning: SimpleXMLElement::xpath(): xmlXPathEval: evaluation failed in %s on line %d bool(false)