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;