1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-10-23 01:52:48 +03:00

fixing yet another pattern induced XPath bug #314282 reverted back last

* pattern.c xpath.c include/libxml/pattern.h: fixing yet another
  pattern induced XPath bug #314282
* relaxng.c: reverted back last change it was seriously broken
Daniel
This commit is contained in:
Daniel Veillard
2005-09-04 12:01:57 +00:00
parent 07b7200775
commit f03a8cdacd
5 changed files with 62 additions and 7 deletions

22
xpath.c
View File

@@ -11003,7 +11003,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
*/
static xmlXPathObjectPtr
xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp) {
int max_depth;
int max_depth, min_depth;
int from_root;
int ret, depth;
xmlNodePtr cur = NULL, limit = NULL;
@@ -11019,6 +11019,9 @@ xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp) {
return(NULL);
if (max_depth == -2)
max_depth = 10000;
min_depth = xmlPatternMinDepth(comp);
if (min_depth == -1)
return(NULL);
from_root = xmlPatternFromRoot(comp);
if (from_root < 0)
return(NULL);
@@ -11030,13 +11033,20 @@ xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp) {
if (retval == NULL)
return(NULL);
if ((from_root) && (max_depth == 0)) {
xmlXPathNodeSetAddUnique(retval->nodesetval, (xmlNodePtr) ctxt->doc);
return(retval);
} else if (max_depth == 0) {
xmlXPathNodeSetAddUnique(retval->nodesetval, ctxt->node);
/*
* handle the special cases of / amd . being matched
*/
if (min_depth == 0) {
if (from_root) {
xmlXPathNodeSetAddUnique(retval->nodesetval, (xmlNodePtr) ctxt->doc);
} else {
xmlXPathNodeSetAddUnique(retval->nodesetval, ctxt->node);
}
}
if (max_depth == 0) {
return(retval);
}
if (from_root) {
cur = (xmlNodePtr)ctxt->doc;
} else if (ctxt->node != NULL) {