From ec2f68f16442cb536ed5a50e23e5d6b60289433f Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Tue, 14 May 2024 15:58:44 +0200 Subject: [PATCH] parser: Report malloc failure in xmlNewInputFromFile --- parserInternals.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/parserInternals.c b/parserInternals.c index 39d0007d..ae7d05b4 100644 --- a/parserInternals.c +++ b/parserInternals.c @@ -2033,7 +2033,8 @@ xmlParserInputPtr xmlNewInputFromFile(xmlParserCtxtPtr ctxt, const char *filename) { xmlParserInputBufferPtr buf; xmlParserInputPtr inputStream; - xmlChar *URI = NULL; + const xmlChar *URI; + xmlChar *canonic; int code; if ((ctxt == NULL) || (filename == NULL)) @@ -2058,12 +2059,18 @@ xmlNewInputFromFile(xmlParserCtxtPtr ctxt, const char *filename) { return(NULL); if (inputStream->filename == NULL) - URI = xmlStrdup((xmlChar *) filename); + URI = (xmlChar *) filename; else - URI = xmlStrdup((xmlChar *) inputStream->filename); - if (inputStream->filename != NULL) xmlFree((char *)inputStream->filename); - inputStream->filename = (char *) xmlCanonicPath((const xmlChar *) URI); - if (URI != NULL) xmlFree((char *) URI); + URI = (xmlChar *) inputStream->filename; + canonic = xmlCanonicPath(URI); + if (canonic == NULL) { + xmlCtxtErrMemory(ctxt); + xmlFreeInputStream(inputStream); + return(NULL); + } + if (inputStream->filename != NULL) + xmlFree((char *) inputStream->filename); + inputStream->filename = (char *) canonic; xmlBufResetInput(inputStream->buf->buffer, inputStream);