svn: /php/php-src/ branches/PHP_5_4/ext/simplexml/simplexml.c branches/PHP_5_4/ext/simplexml/tests/008.phpt trunk/ext/simplexml/simplexml.c
trunk/ext/simplexml/tests/008.phpt
| From: | Christian Stocker | Date: | Wed, 31 Aug 2011 11:44:22 +0000 |
| Subject: | svn: /php/php-src/ branches/PHP_5_4/ext/simplexml/simplexml.c branches/PHP_5_4/ext/simplexml/tests/008.phpt trunk/ext/simplexml/simplexml.c trunk/ext/simplexml/tests/008.phpt |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-66073@lists.php.net to get a copy of this message | ||
chregu Wed, 31 Aug 2011 11:44:22 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=315883
Log:
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
Bug: https://bugs.php.net/48601 (Re-Opened) xpath() returns
FALSE for legitimate query
Changed paths:
U php/php-src/branches/PHP_5_4/ext/simplexml/simplexml.c
U php/php-src/branches/PHP_5_4/ext/simplexml/tests/008.phpt
U php/php-src/trunk/ext/simplexml/simplexml.c
U php/php-src/trunk/ext/simplexml/tests/008.phpt
Modified: php/php-src/branches/PHP_5_4/ext/simplexml/simplexml.c
===================================================================
--- php/php-src/branches/PHP_5_4/ext/simplexml/simplexml.c 2011-08-31 11:27:36 UTC (rev 315882)
+++ php/php-src/branches/PHP_5_4/ext/simplexml/simplexml.c 2011-08-31 11:44:22 UTC (rev 315883)
@@ -1294,8 +1294,9 @@
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) {
@@ -1316,8 +1317,6 @@
add_next_index_zval(return_value, value);
}
}
- } else {
- RETVAL_FALSE;
}
xmlXPathFreeObject(retval);
Modified: php/php-src/branches/PHP_5_4/ext/simplexml/tests/008.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/simplexml/tests/008.phpt 2011-08-31 11:27:36 UTC (rev 315882)
+++ php/php-src/branches/PHP_5_4/ext/simplexml/tests/008.phpt 2011-08-31 11:44:22 UTC (rev 315883)
@@ -25,7 +25,10 @@
$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(0) {
+}
+
+Warning: SimpleXMLElement::xpath(): Invalid expression in %s on line %d
+
+Warning: SimpleXMLElement::xpath(): xmlXPathEval: evaluation failed in %s on line %d
bool(false)
Modified: php/php-src/trunk/ext/simplexml/simplexml.c
===================================================================
--- php/php-src/trunk/ext/simplexml/simplexml.c 2011-08-31 11:27:36 UTC (rev 315882)
+++ php/php-src/trunk/ext/simplexml/simplexml.c 2011-08-31 11:44:22 UTC (rev 315883)
@@ -1294,8 +1294,9 @@
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) {
@@ -1316,8 +1317,6 @@
add_next_index_zval(return_value, value);
}
}
- } else {
- RETVAL_FALSE;
}
xmlXPathFreeObject(retval);
Modified: php/php-src/trunk/ext/simplexml/tests/008.phpt
===================================================================
--- php/php-src/trunk/ext/simplexml/tests/008.phpt 2011-08-31 11:27:36 UTC (rev 315882)
+++ php/php-src/trunk/ext/simplexml/tests/008.phpt 2011-08-31 11:44:22 UTC (rev 315883)
@@ -25,7 +25,10 @@
$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(0) {
+}
+
+Warning: SimpleXMLElement::xpath(): Invalid expression in %s on line %d
+
+Warning: SimpleXMLElement::xpath(): xmlXPathEval: evaluation failed in %s on line %d
bool(false)