fixed a push/encoding bug reported by Michael on librsvg Daniel

* parser.c: fixed a push/encoding bug reported by Michael
  on librsvg
Daniel
diff --git a/parser.c b/parser.c
index e07ca38..3144c3e 100644
--- a/parser.c
+++ b/parser.c
@@ -7929,8 +7929,28 @@
 	if (ctxt->input ==NULL) break;
 	if (ctxt->input->buf == NULL)
 	    avail = ctxt->input->length - (ctxt->input->cur - ctxt->input->base);
-	else
-	    avail = ctxt->input->buf->buffer->use - (ctxt->input->cur - ctxt->input->base);
+	else {
+	    /*
+	     * If we are operating on converted input, try to flush
+	     * remainng chars to avoid them stalling in the non-converted
+	     * buffer.
+	     */
+	    if ((ctxt->input->buf->raw != NULL) &&
+		(ctxt->input->buf->raw->use > 0)) {
+		int base = ctxt->input->base -
+		           ctxt->input->buf->buffer->content;
+		int current = ctxt->input->cur - ctxt->input->base;
+
+		xmlParserInputBufferPush(ctxt->input->buf, 0, "");
+		ctxt->input->base = ctxt->input->buf->buffer->content + base;
+		ctxt->input->cur = ctxt->input->base + current;
+		ctxt->input->end =
+		    &ctxt->input->buf->buffer->content[
+		                       ctxt->input->buf->buffer->use];
+	    }
+	    avail = ctxt->input->buf->buffer->use -
+		    (ctxt->input->cur - ctxt->input->base);
+	}
         if (avail < 1)
 	    goto done;
         switch (ctxt->instate) {