| Index: third_party/libxslt/libexslt/functions.c
|
| ===================================================================
|
| --- third_party/libxslt/libexslt/functions.c (revision 39981)
|
| +++ third_party/libxslt/libexslt/functions.c (working copy)
|
| @@ -57,6 +57,8 @@
|
| int nargs);
|
| static exsltFuncFunctionData *exsltFuncNewFunctionData(void);
|
|
|
| +#define MAX_FUNC_RECURSION 1000
|
| +
|
| /*static const xmlChar *exsltResultDataID = (const xmlChar *) "EXSLT Result";*/
|
|
|
| /**
|
| @@ -321,6 +323,15 @@
|
| "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.
|
| * The original library code did not evaluate XPath expressions until
|
| @@ -437,6 +448,7 @@
|
| * the calling process exits.
|
| */
|
| xsltExtensionInstructionResultFinalize(tctxt);
|
| + tctxt->funcLevel--;
|
| }
|
|
|
|
|
|
|