Index: third_party/libxslt/libexslt/functions.c |
diff --git a/third_party/libxslt/libexslt/functions.c b/third_party/libxslt/libexslt/functions.c |
index e6e245fd18fa2df6c81d804425d8fa9709d2d033..0795a13dadddc4cc632981813bb8a5751c1b72e4 100644 |
--- a/third_party/libxslt/libexslt/functions.c |
+++ b/third_party/libxslt/libexslt/functions.c |
@@ -112,6 +112,8 @@ exsltFuncRegisterImportFunc (exsltFuncFunctionData *data, |
func = (exsltFuncFunctionData*)xmlHashLookup2(ch->hash, URI, name); |
if (func == NULL) { /* Not yet present - copy it in */ |
func = exsltFuncNewFunctionData(); |
+ if (func == NULL) |
+ return; |
memcpy(func, data, sizeof(exsltFuncFunctionData)); |
if (xmlHashAddEntry2(ch->hash, URI, name, func) < 0) { |
xsltGenericError(xsltGenericErrorContext, |
@@ -301,6 +303,14 @@ exsltFuncFunctionFunction (xmlXPathParserContextPtr ctxt, int nargs) { |
func = (exsltFuncFunctionData*) xmlHashLookup2 (data->funcs, |
ctxt->context->functionURI, |
ctxt->context->function); |
+ if (func == NULL) { |
+ /* Should never happen */ |
+ xsltGenericError(xsltGenericErrorContext, |
+ "{%s}%s: not found\n", |
+ ctxt->context->functionURI, ctxt->context->function); |
+ ctxt->error = XPATH_UNKNOWN_FUNC_ERROR; |
+ return; |
+ } |
/* |
* params handling |
@@ -494,6 +504,10 @@ exsltFuncFunctionComp (xsltStylesheetPtr style, xmlNodePtr inst) { |
* Create function data |
*/ |
func = exsltFuncNewFunctionData(); |
+ if (func == NULL) { |
+ xmlFree(name); |
+ return; |
+ } |
func->content = inst->children; |
while (IS_XSLT_ELEM(func->content) && |
IS_XSLT_NAME(func->content, "param")) { |