From f9e7997e803457b714352c4d51a96104ae298d94 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 10 Jun 2017 00:33:07 +0200 Subject: [PATCH] Reset parser input pointers on encoding failure Call xmlBufResetInput before bailing out if switching the encoding fails. Otherwise, the input pointers are left in an invalid state. This would typically lead to an internal error in xmlGROW but could also cause other unforeseen problems. --- parserInternals.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parserInternals.c b/parserInternals.c index 67e55181..f09142b8 100644 --- a/parserInternals.c +++ b/parserInternals.c @@ -1233,6 +1233,7 @@ xmlSwitchInputEncodingInt(xmlParserCtxtPtr ctxt, xmlParserInputPtr input, */ nbchars = xmlCharEncFirstLineInput(input->buf, len); } + xmlBufResetInput(input->buf->buffer, input); if (nbchars < 0) { xmlErrInternal(ctxt, "switching encoding: encoder error\n", @@ -1240,7 +1241,6 @@ xmlSwitchInputEncodingInt(xmlParserCtxtPtr ctxt, xmlParserInputPtr input, return (-1); } input->buf->rawconsumed += use - xmlBufUse(input->buf->raw); - xmlBufResetInput(input->buf->buffer, input); } return (0); } else if (input->length == 0) {