Commit 08108984 authored by Daniel Veillard's avatar Daniel Veillard
Browse files

- testXPath.c xpath.c: fixing the XPath union expressions problem

  reported by  Martin Vidner <martin@artax.karlin.mff.cuni.cz>
Daniel
parent 4a6845df
Wed Jan 3 16:19:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
* testXPath.c xpath.c: fixing the XPath union expressions problem
reported by Martin Vidner <martin@artax.karlin.mff.cuni.cz>
Wed Jan 3 14:22:33 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
* xmllint.c: Made is so if the file name is "-" is will read form
......
......@@ -98,6 +98,7 @@ void testXPath(const char *str) {
} else {
#endif
ctxt = xmlXPathNewContext(document);
ctxt->node = xmlDocGetRootElement(document);
if (expr)
res = xmlXPathEvalExpression(BAD_CAST str, ctxt);
else
......
......@@ -4730,12 +4730,13 @@ xmlXPathEvalUnionExpr(xmlXPathParserContextPtr ctxt) {
xmlXPathEvalPathExpr(ctxt);
CHECK_ERROR;
SKIP_BLANKS;
if (CUR == '|') {
xmlXPathObjectPtr obj1,obj2;
while (CUR == '|') {
xmlXPathObjectPtr obj1,obj2, tmp;
CHECK_TYPE(XPATH_NODESET);
obj1 = valuePop(ctxt);
valuePush(ctxt, xmlXPathNewNodeSet(ctxt->context->node));
tmp = xmlXPathNewNodeSet(ctxt->context->node);
valuePush(ctxt, tmp);
NEXT;
SKIP_BLANKS;
......@@ -4745,6 +4746,10 @@ xmlXPathEvalUnionExpr(xmlXPathParserContextPtr ctxt) {
obj2 = valuePop(ctxt);
obj1->nodesetval = xmlXPathNodeSetMerge(obj1->nodesetval,
obj2->nodesetval);
if (ctxt->value == tmp) {
tmp = valuePop(ctxt);
xmlXPathFreeObject(tmp);
}
valuePush(ctxt, obj1);
xmlXPathFreeObject(obj2);
SKIP_BLANKS;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment