parser: Support encoded external PEs in entity values

Corner case which was never supported.
diff --git a/parser.c b/parser.c
index 9740e9b..b717e12 100644
--- a/parser.c
+++ b/parser.c
@@ -8183,7 +8183,7 @@
  */
 static int
 xmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
-    xmlParserInputPtr input = NULL;
+    xmlParserInputPtr oldinput, input = NULL;
     xmlChar *content = NULL;
     size_t length, i;
     int ret = -1;
@@ -8210,6 +8210,32 @@
         return(-1);
     }
 
+    xmlBufResetInput(input->buf->buffer, input);
+
+    oldinput = ctxt->input;
+    ctxt->input = input;
+
+    xmlDetectEncoding(ctxt);
+
+    /*
+     * Parse a possible text declaration first
+     */
+    if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
+	xmlParseTextDecl(ctxt);
+        /*
+         * An XML-1.0 document can't reference an entity not XML-1.0
+         */
+        if ((xmlStrEqual(ctxt->version, BAD_CAST "1.0")) &&
+            (!xmlStrEqual(ctxt->input->version, BAD_CAST "1.0"))) {
+            xmlFatalErrMsg(ctxt, XML_ERR_VERSION_MISMATCH,
+                           "Version mismatch between document and entity\n");
+        }
+    }
+
+    ctxt->input = oldinput;
+
+    xmlBufShrink(input->buf->buffer, input->cur - input->base);
+
     while ((res = xmlParserInputBufferGrow(input->buf, 16384)) > 0)
         ;
 
diff --git a/result/valid/pe-val-latin1.xml b/result/valid/pe-val-latin1.xml
new file mode 100644
index 0000000..4da3720
--- /dev/null
+++ b/result/valid/pe-val-latin1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE doc SYSTEM "dtds/pe-val-latin1.dtd">
+<doc>&latin1;</doc>
diff --git a/test/valid/dtds/pe-val-latin1.dtd b/test/valid/dtds/pe-val-latin1.dtd
new file mode 100644
index 0000000..c7bcb72
--- /dev/null
+++ b/test/valid/dtds/pe-val-latin1.dtd
@@ -0,0 +1,3 @@
+<!ELEMENT doc (#PCDATA)>
+<!ENTITY % pe SYSTEM "pe-val-latin1.ent">
+<!ENTITY latin1 "%pe;">
diff --git a/test/valid/dtds/pe-val-latin1.ent b/test/valid/dtds/pe-val-latin1.ent
new file mode 100644
index 0000000..171e58f
--- /dev/null
+++ b/test/valid/dtds/pe-val-latin1.ent
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+äöü
diff --git a/test/valid/pe-val-latin1.xml b/test/valid/pe-val-latin1.xml
new file mode 100644
index 0000000..97664a8
--- /dev/null
+++ b/test/valid/pe-val-latin1.xml
@@ -0,0 +1,2 @@
+<!DOCTYPE doc SYSTEM "dtds/pe-val-latin1.dtd">
+<doc>&latin1;</doc>