diff options
Diffstat (limited to 'chromium/third_party/libxml/src/parser.c')
-rw-r--r-- | chromium/third_party/libxml/src/parser.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/chromium/third_party/libxml/src/parser.c b/chromium/third_party/libxml/src/parser.c index 705c7216882..a8ba76d75e8 100644 --- a/chromium/third_party/libxml/src/parser.c +++ b/chromium/third_party/libxml/src/parser.c @@ -2703,8 +2703,10 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, rep = xmlStringDecodeEntities(ctxt, ent->content, what, 0, 0, 0); ctxt->depth--; - if (rep == NULL) + if (rep == NULL) { + ent->content[0] = 0; goto int_error; + } current = rep; while (*current != 0) { /* non input consuming loop */ @@ -2759,8 +2761,11 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, rep = xmlStringDecodeEntities(ctxt, ent->content, what, 0, 0, 0); ctxt->depth--; - if (rep == NULL) + if (rep == NULL) { + if (ent->content != NULL) + ent->content[0] = 0; goto int_error; + } current = rep; while (*current != 0) { /* non input consuming loop */ buffer[nbchars++] = *current++; @@ -4223,6 +4228,7 @@ xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) { } count++; if (count > 50) { + SHRINK; GROW; count = 0; if (ctxt->instate == XML_PARSER_EOF) { @@ -4310,6 +4316,7 @@ xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) { buf[len++] = cur; count++; if (count > 50) { + SHRINK; GROW; count = 0; if (ctxt->instate == XML_PARSER_EOF) { @@ -4590,6 +4597,7 @@ xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata) { } count++; if (count > 50) { + SHRINK; GROW; count = 0; if (ctxt->instate == XML_PARSER_EOF) @@ -4795,6 +4803,7 @@ xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, count++; if (count > 50) { + SHRINK; GROW; count = 0; if (ctxt->instate == XML_PARSER_EOF) { @@ -5205,6 +5214,7 @@ xmlParsePI(xmlParserCtxtPtr ctxt) { } count++; if (count > 50) { + SHRINK; GROW; if (ctxt->instate == XML_PARSER_EOF) { xmlFree(buf); @@ -6217,6 +6227,8 @@ xmlParseElementChildrenContentDeclPriv(xmlParserCtxtPtr ctxt, int inputchk, SKIP_BLANKS; cur = ret = xmlParseElementChildrenContentDeclPriv(ctxt, inputid, depth + 1); + if (cur == NULL) + return(NULL); SKIP_BLANKS; GROW; } else { @@ -6350,6 +6362,11 @@ xmlParseElementChildrenContentDeclPriv(xmlParserCtxtPtr ctxt, int inputchk, SKIP_BLANKS; last = xmlParseElementChildrenContentDeclPriv(ctxt, inputid, depth + 1); + if (last == NULL) { + if (ret != NULL) + xmlFreeDocElementContent(ctxt->myDoc, ret); + return(NULL); + } SKIP_BLANKS; } else { elem = xmlParseName(ctxt); @@ -9816,6 +9833,7 @@ xmlParseCDSect(xmlParserCtxtPtr ctxt) { sl = l; count++; if (count > 50) { + SHRINK; GROW; if (ctxt->instate == XML_PARSER_EOF) { xmlFree(buf); |