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);
}