Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1463)

Unified Diff: third_party/libxslt/libexslt/functions.c

Issue 2411263002: Roll libxslt to 8345634c5482ca04293ae1862d52fa9dd764aeca (Closed)
Patch Set: config.log Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/libxslt/libexslt/dynamic.c ('k') | third_party/libxslt/libexslt/strings.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/libxslt/libexslt/functions.c
diff --git a/third_party/libxslt/libexslt/functions.c b/third_party/libxslt/libexslt/functions.c
index 0795a13dadddc4cc632981813bb8a5751c1b72e4..b49fbe6c32aa09a3bdfa982a79e2dd9f3e8c171f 100644
--- a/third_party/libxslt/libexslt/functions.c
+++ b/third_party/libxslt/libexslt/functions.c
@@ -35,7 +35,6 @@ struct _exsltFuncData {
xmlHashTablePtr funcs; /* pointer to the stylesheet module data */
xmlXPathObjectPtr result; /* returned by func:result */
int error; /* did an error occur? */
- xmlDocPtr RVT; /* result tree fragment */
};
typedef struct _exsltFuncResultPreComp exsltFuncResultPreComp;
@@ -57,8 +56,6 @@ static void exsltFuncFunctionFunction (xmlXPathParserContextPtr ctxt,
int nargs);
static exsltFuncFunctionData *exsltFuncNewFunctionData(void);
-#define MAX_FUNC_RECURSION 1000
-
/*static const xmlChar *exsltResultDataID = (const xmlChar *) "EXSLT Result";*/
/**
@@ -333,14 +330,6 @@ exsltFuncFunctionFunction (xmlXPathParserContextPtr ctxt, int nargs) {
"param == NULL\n");
return;
}
- if (tctxt->funcLevel > MAX_FUNC_RECURSION) {
- xsltGenericError(xsltGenericErrorContext,
- "{%s}%s: detected a recursion\n",
- ctxt->context->functionURI, ctxt->context->function);
- ctxt->error = XPATH_MEMORY_ERROR;
- return;
- }
- tctxt->funcLevel++;
/*
* We have a problem with the evaluation of function parameters.
@@ -424,10 +413,16 @@ exsltFuncFunctionFunction (xmlXPathParserContextPtr ctxt, int nargs) {
xsltFreeStackElemList(params);
if (data->error != 0)
- goto error;
+ return;
if (data->result != NULL) {
ret = data->result;
+ /*
+ * IMPORTANT: This enables previously tree fragments marked as
+ * being results of a function, to be garbage-collected after
+ * the calling process exits.
+ */
+ xsltFlagRVTs(tctxt, ret, XSLT_RVT_LOCAL);
} else
ret = xmlXPathNewCString("");
@@ -446,19 +441,10 @@ exsltFuncFunctionFunction (xmlXPathParserContextPtr ctxt, int nargs) {
"executing a function\n",
ctxt->context->functionURI, ctxt->context->function);
xmlFreeNode(fake);
- goto error;
+ return;
}
xmlFreeNode(fake);
valuePush(ctxt, ret);
-
-error:
- /*
- * IMPORTANT: This enables previously tree fragments marked as
- * being results of a function, to be garbage-collected after
- * the calling process exits.
- */
- xsltExtensionInstructionResultFinalize(tctxt);
- tctxt->funcLevel--;
}
@@ -724,7 +710,7 @@ exsltFuncResultElem (xsltTransformContextPtr ctxt,
* Mark it as a function result in order to avoid garbage
* collecting of tree fragments before the function exits.
*/
- xsltExtensionInstructionResultRegister(ctxt, ret);
+ xsltFlagRVTs(ctxt, ret, XSLT_RVT_FUNC_RESULT);
} else if (inst->children != NULL) {
/* If the func:result element does not have a select attribute
* and has non-empty content (i.e. the func:result element has
@@ -741,7 +727,8 @@ exsltFuncResultElem (xsltTransformContextPtr ctxt,
data->error = 1;
return;
}
- xsltRegisterLocalRVT(ctxt, container);
+ /* Mark as function result. */
+ container->psvi = XSLT_RVT_FUNC_RESULT;
oldInsert = ctxt->insert;
ctxt->insert = (xmlNodePtr) container;
@@ -756,11 +743,6 @@ exsltFuncResultElem (xsltTransformContextPtr ctxt,
data->error = 1;
} else {
ret->boolval = 0; /* Freeing is not handled there anymore */
- /*
- * Mark it as a function result in order to avoid garbage
- * collecting of tree fragments before the function exits.
- */
- xsltExtensionInstructionResultRegister(ctxt, ret);
}
} else {
/* If the func:result element has empty content and does not
« no previous file with comments | « third_party/libxslt/libexslt/dynamic.c ('k') | third_party/libxslt/libexslt/strings.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698