diff options
author | Daniel Veillard <veillard@src.gnome.org> | 2003-08-14 00:33:46 +0000 |
---|---|---|
committer | Daniel Veillard <veillard@src.gnome.org> | 2003-08-14 00:33:46 +0000 |
commit | b19ba83f072551ce9803af282b06aeb7228d4d97 (patch) | |
tree | 2dc3a9be5101d1948115d12d58b1ed78b81fa3e7 | |
parent | ccf9e39d977db2f14d2bc152392ad87c90c3feda (diff) | |
download | libxml2-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-- | ChangeLog | 7 | ||||
-rw-r--r-- | HTMLparser.c | 1 | ||||
-rw-r--r-- | parser.c | 20 |
3 files changed, 25 insertions, 3 deletions
@@ -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; } @@ -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; |