diff --git a/HTMLparser.c b/HTMLparser.c
index cb2671655e2a547dd0dfab8dfa44d34ac5c15528_SFRNTHBhcnNlci5j..8e47bfa4203382266b82597804b6396bc0d8e44b_SFRNTHBhcnNlci5j 100644
--- a/HTMLparser.c
+++ b/HTMLparser.c
@@ -7116,7 +7116,7 @@
 htmlCtxtReadDoc(htmlParserCtxtPtr ctxt, const xmlChar * cur,
                const char *URL, const char *encoding, int options)
 {
-    xmlParserInputPtr stream;
+    const char *buf;
 
     if (cur == NULL)
         return (NULL);
@@ -7120,18 +7120,9 @@
 
     if (cur == NULL)
         return (NULL);
-    if (ctxt == NULL)
-        return (NULL);
-    xmlInitParser();
-
-    htmlCtxtReset(ctxt);
-
-    stream = xmlNewStringInputStream(ctxt, cur);
-    if (stream == NULL) {
-        return (NULL);
-    }
-    inputPush(ctxt, stream);
-    return (htmlDoRead(ctxt, URL, encoding, options, 1));
+    buf = (const char *) cur;
+    return (htmlCtxtReadMemory(ctxt, buf, strlen(buf), URL, encoding,
+                               options));
 }
 
 /**
diff --git a/parser.c b/parser.c
index cb2671655e2a547dd0dfab8dfa44d34ac5c15528_cGFyc2VyLmM=..8e47bfa4203382266b82597804b6396bc0d8e44b_cGFyc2VyLmM= 100644
--- a/parser.c
+++ b/parser.c
@@ -15359,7 +15359,7 @@
 xmlCtxtReadDoc(xmlParserCtxtPtr ctxt, const xmlChar * cur,
                const char *URL, const char *encoding, int options)
 {
-    xmlParserInputPtr stream;
+    const char *buf;
 
     if (cur == NULL)
         return (NULL);
@@ -15363,18 +15363,8 @@
 
     if (cur == NULL)
         return (NULL);
-    if (ctxt == NULL)
-        return (NULL);
-    xmlInitParser();
-
-    xmlCtxtReset(ctxt);
-
-    stream = xmlNewStringInputStream(ctxt, cur);
-    if (stream == NULL) {
-        return (NULL);
-    }
-    inputPush(ctxt, stream);
-    return (xmlDoRead(ctxt, URL, encoding, options, 1));
+    buf = (const char *) cur;
+    return (xmlCtxtReadMemory(ctxt, buf, strlen(buf), URL, encoding, options));
 }
 
 /**