[libxslt] Make sure that XSLT_STATE_STOPPED isn't overwritten



commit 91789dba139f69937514466bbe8891b46931b450
Author: Nick Wellnhofer <wellnhofer aevum de>
Date:   Fri Jun 3 17:33:55 2016 +0200

    Make sure that XSLT_STATE_STOPPED isn't overwritten
    
    Overwriting XSLT_STATE_STOPPED with XSLT_STATE_ERROR makes the
    transform continue. This is not what we want.

 libxslt/transform.c |    1 -
 libxslt/xslt.c      |    6 ++----
 libxslt/xsltutils.c |    9 +++++----
 3 files changed, 7 insertions(+), 9 deletions(-)
---
diff --git a/libxslt/transform.c b/libxslt/transform.c
index c89f20e..f0e168c 100644
--- a/libxslt/transform.c
+++ b/libxslt/transform.c
@@ -3814,7 +3814,6 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
        xsltTransformError(ctxt, NULL, inst,
                          "xsltDocumentElem: unable to save to %s\n",
                          filename);
-       ctxt->state = XSLT_STATE_ERROR;
 #ifdef WITH_XSLT_DEBUG_EXTRA
     } else {
         xsltGenericDebug(xsltGenericDebugContext,
diff --git a/libxslt/xslt.c b/libxslt/xslt.c
index bca91ee..22283df 100644
--- a/libxslt/xslt.c
+++ b/libxslt/xslt.c
@@ -810,9 +810,8 @@ xsltAllocateExtraCtxt(xsltTransformContextPtr ctxt)
            ctxt->extras = (xsltRuntimeExtraPtr)
                xmlMalloc(ctxt->extrasMax * sizeof(xsltRuntimeExtra));
            if (ctxt->extras == NULL) {
-               xmlGenericError(xmlGenericErrorContext,
+               xsltTransformError(ctxt, NULL, NULL,
                        "xsltAllocateExtraCtxt: out of memory\n");
-               ctxt->state = XSLT_STATE_ERROR;
                return(0);
            }
            for (i = 0;i < ctxt->extrasMax;i++) {
@@ -828,9 +827,8 @@ xsltAllocateExtraCtxt(xsltTransformContextPtr ctxt)
            tmp = (xsltRuntimeExtraPtr) xmlRealloc(ctxt->extras,
                            ctxt->extrasMax * sizeof(xsltRuntimeExtra));
            if (tmp == NULL) {
-               xmlGenericError(xmlGenericErrorContext,
+               xsltTransformError(ctxt, NULL, NULL,
                        "xsltAllocateExtraCtxt: out of memory\n");
-               ctxt->state = XSLT_STATE_ERROR;
                return(0);
            }
            ctxt->extras = tmp;
diff --git a/libxslt/xsltutils.c b/libxslt/xsltutils.c
index 1646c44..c250ccf 100644
--- a/libxslt/xsltutils.c
+++ b/libxslt/xsltutils.c
@@ -457,9 +457,8 @@ xsltMessage(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst) {
        } else if (xmlStrEqual(prop, (const xmlChar *)"no")) {
            terminate = 0;
        } else {
-           error(errctx,
+           xsltTransformError(ctxt, NULL, inst,
                "xsl:message : terminate expecting 'yes' or 'no'\n");
-           ctxt->state = XSLT_STATE_ERROR;
        }
        xmlFree(prop);
     }
@@ -622,7 +621,8 @@ xsltPrintErrorContext(xsltTransformContextPtr ctxt,
     void *errctx = xsltGenericErrorContext;
 
     if (ctxt != NULL) {
-       ctxt->state = XSLT_STATE_ERROR;
+        if (ctxt->state == XSLT_STATE_OK)
+           ctxt->state = XSLT_STATE_ERROR;
        if (ctxt->error != NULL) {
            error = ctxt->error;
            errctx = ctxt->errctx;
@@ -715,7 +715,8 @@ xsltTransformError(xsltTransformContextPtr ctxt,
     char * str;
 
     if (ctxt != NULL) {
-       ctxt->state = XSLT_STATE_ERROR;
+        if (ctxt->state == XSLT_STATE_OK)
+           ctxt->state = XSLT_STATE_ERROR;
        if (ctxt->error != NULL) {
            error = ctxt->error;
            errctx = ctxt->errctx;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]