summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Veillard <veillard@src.gnome.org>2003-08-14 00:33:46 +0000
committerDaniel Veillard <veillard@src.gnome.org>2003-08-14 00:33:46 +0000
commitb19ba83f072551ce9803af282b06aeb7228d4d97 (patch)
tree2dc3a9be5101d1948115d12d58b1ed78b81fa3e7
parentccf9e39d977db2f14d2bc152392ad87c90c3feda (diff)
downloadlibxml2-b19ba83f072551ce9803af282b06aeb7228d4d97.tar.gz
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
-rw-r--r--ChangeLog7
-rw-r--r--HTMLparser.c1
-rw-r--r--parser.c20
3 files changed, 25 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 16ba83b4..b3936a75 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 2168bbdf..8f9cfff3 100644
--- a/HTMLparser.c
+++ b/HTMLparser.c
@@ -5322,6 +5322,7 @@ htmlSAXParseDoc(xmlChar *cur, const char *encoding, htmlSAXHandlerPtr sax, void
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 1a8ba365..cb7fce4f 100644
--- a/parser.c
+++ b/parser.c
@@ -369,7 +369,8 @@ static int spacePop(xmlParserCtxtPtr ctxt) {
} 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 @@ xmlParseEncodingDecl(xmlParserCtxtPtr ctxt) {
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;