Fix for compiled XPath helpers

The helper functions added in commit c618db4 didn't restore context size
and position. Unfortunately, xmlXPathCompiledEval changes these values
in some rare cases.
This commit is contained in:
Nick Wellnhofer 2014-10-03 17:57:46 +02:00
parent daab56af4d
commit de1fca613e

View File

@ -353,10 +353,12 @@ xsltPreCompEval(xsltTransformContextPtr ctxt, xmlNodePtr node,
xmlXPathContextPtr xpctxt;
xmlNodePtr oldXPContextNode;
xmlNsPtr *oldXPNamespaces;
int oldXPNsNr;
int oldXPProximityPosition, oldXPContextSize, oldXPNsNr;
xpctxt = ctxt->xpathCtxt;
oldXPContextNode = xpctxt->node;
oldXPProximityPosition = xpctxt->proximityPosition;
oldXPContextSize = xpctxt->contextSize;
oldXPNsNr = xpctxt->nsNr;
oldXPNamespaces = xpctxt->namespaces;
@ -377,6 +379,8 @@ xsltPreCompEval(xsltTransformContextPtr ctxt, xmlNodePtr node,
res = xmlXPathCompiledEval(comp->comp, xpctxt);
xpctxt->node = oldXPContextNode;
xpctxt->proximityPosition = oldXPProximityPosition;
xpctxt->contextSize = oldXPContextSize;
xpctxt->nsNr = oldXPNsNr;
xpctxt->namespaces = oldXPNamespaces;
@ -398,10 +402,12 @@ xsltPreCompEvalToBoolean(xsltTransformContextPtr ctxt, xmlNodePtr node,
xmlXPathContextPtr xpctxt;
xmlNodePtr oldXPContextNode;
xmlNsPtr *oldXPNamespaces;
int oldXPNsNr;
int oldXPProximityPosition, oldXPContextSize, oldXPNsNr;
xpctxt = ctxt->xpathCtxt;
oldXPContextNode = xpctxt->node;
oldXPProximityPosition = xpctxt->proximityPosition;
oldXPContextSize = xpctxt->contextSize;
oldXPNsNr = xpctxt->nsNr;
oldXPNamespaces = xpctxt->namespaces;
@ -422,6 +428,8 @@ xsltPreCompEvalToBoolean(xsltTransformContextPtr ctxt, xmlNodePtr node,
res = xmlXPathCompiledEvalToBoolean(comp->comp, xpctxt);
xpctxt->node = oldXPContextNode;
xpctxt->proximityPosition = oldXPProximityPosition;
xpctxt->contextSize = oldXPContextSize;
xpctxt->nsNr = oldXPNsNr;
xpctxt->namespaces = oldXPNamespaces;