diff --git a/HTMLparser.c b/HTMLparser.c index 99283ba8..42b182a4 100644 --- a/HTMLparser.c +++ b/HTMLparser.c @@ -3628,10 +3628,6 @@ htmlCharEncCheckAsciiCompatible(htmlParserCtxt *ctxt, XML_ENC_INPUT | XML_ENC_HTML, ctxt->convImpl, ctxt->convCtxt, &handler); - /* - * TODO: Unlike the XML parser, we shouldn't raise a fatal - * if the encoding is unsupported. - */ if (res != XML_ERR_OK) { xmlFatalErr(ctxt, res, (const char *) encoding); return(-1); @@ -3711,10 +3707,6 @@ htmlCheckMeta(htmlParserCtxtPtr ctxt, const xmlChar **atts) { return; } - /* - * TODO: Unlike the XML parser, we shouldn't raise a fatal - * if the encoding is unsupported. - */ xmlSetDeclaredEncoding(ctxt, encoding); } } diff --git a/parserInternals.c b/parserInternals.c index 0320ae07..3af1b8c0 100644 --- a/parserInternals.c +++ b/parserInternals.c @@ -468,14 +468,24 @@ void xmlFatalErr(xmlParserCtxt *ctxt, xmlParserErrors code, const char *info) { const char *errmsg; + xmlErrorDomain domain = XML_FROM_PARSER; + xmlErrorLevel level = XML_ERR_FATAL; errmsg = xmlErrString(code); + if ((ctxt != NULL) && (ctxt->html)) { + domain = XML_FROM_HTML; + + /* Continue if encoding is unsupported */ + if (code == XML_ERR_UNSUPPORTED_ENCODING) + level = XML_ERR_ERROR; + } + if (info == NULL) { - xmlCtxtErr(ctxt, NULL, XML_FROM_PARSER, code, XML_ERR_FATAL, + xmlCtxtErr(ctxt, NULL, domain, code, level, NULL, NULL, NULL, 0, "%s\n", errmsg); } else { - xmlCtxtErr(ctxt, NULL, XML_FROM_PARSER, code, XML_ERR_FATAL, + xmlCtxtErr(ctxt, NULL, domain, code, level, (const xmlChar *) info, NULL, NULL, 0, "%s: %s\n", errmsg, info); }