fixing #151456, an encoding error could generate a serialization loop.

* xmlIO.c: fixing #151456, an encoding error could generate
  a serialization loop.
Daniel
diff --git a/ChangeLog b/ChangeLog
index 5b9df46..2402eb4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Aug 31 14:14:30 CEST 2004 Daniel Veillard <daniel@veillard.com>
+
+	* xmlIO.c: fixing #151456, an encoding error could generate
+	  a serialization loop.
+
 Tue Aug 31 11:34:04 CEST 2004 Daniel Veillard <daniel@veillard.com>
 
 	* Makefile.am: also produce a tar ball with just the sources
diff --git a/xmlIO.c b/xmlIO.c
index a80c583..13a57e7 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -3024,6 +3024,7 @@
     int nbchars = 0; /* number of chars to output to I/O */
     int ret;         /* return from function call */
     int written = 0; /* number of char written to I/O so far */
+    int oldwritten=0;/* loop guard */
     int chunk;       /* number of byte currently processed from str */
     int len;         /* number of bytes in str */
     int cons;        /* byte from str consumed */
@@ -3035,6 +3036,8 @@
     if (escaping == NULL) escaping = xmlEscapeContent;
 
     do {
+        oldwritten = written;
+
         /*
 	 * how many bytes to consume and how many bytes to store.
 	 */
@@ -3111,7 +3114,7 @@
 	    xmlBufferResize(out->buffer, out->buffer->size + MINLEN);
 	}
 	written += nbchars;
-    } while (len > 0);
+    } while ((len > 0) && (oldwritten != written));
 
 done:
 #ifdef DEBUG_INPUT