fixed the serious CPU usage problem reported by Grant Goodale applied

* parser.c: fixed the serious CPU usage problem reported by
  Grant Goodale
* HTMLparser.c: applied patch from Oliver Kidman about a free
  missing in htmlSAXParseDoc
Daniel
diff --git a/ChangeLog b/ChangeLog
index 16ba83b..b3936a7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Thu Aug 14 02:28:36 CEST 2003 Daniel Veillard <daniel@veillard.com>
+
+	* parser.c: fixed the serious CPU usage problem reported by
+	  Grant Goodale
+	* HTMLparser.c: applied patch from Oliver Kidman about a free
+	  missing in htmlSAXParseDoc
+
 Tue Aug 12 22:48:10 HKT 2003 William Brack <wbrack@mmm.com.hk>
 
 	* doc/Makefile.am: Removed dependency from libxml2.def.src
diff --git a/HTMLparser.c b/HTMLparser.c
index 2168bbd..8f9cfff 100644
--- a/HTMLparser.c
+++ b/HTMLparser.c
@@ -5322,6 +5322,7 @@
     ctxt = htmlCreateDocParserCtxt(cur, encoding);
     if (ctxt == NULL) return(NULL);
     if (sax != NULL) { 
+        if (ctxt->sax != NULL) xmlFree (ctxt->sax);
         ctxt->sax = sax;
         ctxt->userData = userData;
     }
diff --git a/parser.c b/parser.c
index 1a8ba36..cb7fce4 100644
--- a/parser.c
+++ b/parser.c
@@ -369,7 +369,8 @@
   } while (0)
 
 #define SHRINK if ((ctxt->progressive == 0) &&				\
-		   (ctxt->input->cur - ctxt->input->base > INPUT_CHUNK))\
+		   (ctxt->input->cur - ctxt->input->base > INPUT_CHUNK) && \
+		   (ctxt->input->end - ctxt->input->cur < INPUT_CHUNK)) \
 	xmlSHRINK (ctxt);
 
 static void xmlSHRINK (xmlParserCtxtPtr ctxt) {
@@ -7581,8 +7582,21 @@
         if ((encoding != NULL) &&
 	    ((!xmlStrcasecmp(encoding, BAD_CAST "UTF-16")) ||
 	     (!xmlStrcasecmp(encoding, BAD_CAST "UTF16")))) {
-	     xmlFree(encoding);
-	     encoding = NULL;
+	    if (ctxt->input->encoding != NULL)
+		xmlFree((xmlChar *) ctxt->input->encoding);
+	    ctxt->input->encoding = encoding;
+	    encoding = NULL;
+	}
+	/*
+	 * UTF-8 encoding is handled natively
+	 */
+        if ((encoding != NULL) &&
+	    ((!xmlStrcasecmp(encoding, BAD_CAST "UTF-8")) ||
+	     (!xmlStrcasecmp(encoding, BAD_CAST "UTF8")))) {
+	    if (ctxt->input->encoding != NULL)
+		xmlFree((xmlChar *) ctxt->input->encoding);
+	    ctxt->input->encoding = encoding;
+	    encoding = NULL;
 	}
 	if (encoding != NULL) {
 	    xmlCharEncodingHandlerPtr handler;