[libxml2] parser.c: shrink the input buffer when appropriate



commit afad37216b7aaf6c4faf60cce7358a7bbc04c2b1
Author: Mike Dalessio <mike dalessio gmail com>
Date:   Sun Jan 31 09:53:56 2021 -0500

    parser.c: shrink the input buffer when appropriate
    
    Fixes GNOME/libxml2#200
    
    Also see discussions at:
    - GNOME/libxml2#192
    - https://gitlab.gnome.org/nwellnhof/libxml2/-/commit/99bda1e
    - https://github.com/sparklemotion/nokogiri/issues/2132

 parser.c | 6 ++++++
 1 file changed, 6 insertions(+)
---
diff --git a/parser.c b/parser.c
index a7bdc7f3..efde672f 100644
--- a/parser.c
+++ b/parser.c
@@ -4204,6 +4204,7 @@ xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) {
        }
        count++;
        if (count > 50) {
+           SHRINK;
            GROW;
            count = 0;
             if (ctxt->instate == XML_PARSER_EOF) {
@@ -4291,6 +4292,7 @@ xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) {
        buf[len++] = cur;
        count++;
        if (count > 50) {
+           SHRINK;
            GROW;
            count = 0;
             if (ctxt->instate == XML_PARSER_EOF) {
@@ -4571,6 +4573,7 @@ xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata) {
        }
        count++;
        if (count > 50) {
+           SHRINK;
            GROW;
            count = 0;
             if (ctxt->instate == XML_PARSER_EOF)
@@ -4776,6 +4779,7 @@ xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf,
 
        count++;
        if (count > 50) {
+           SHRINK;
            GROW;
            count = 0;
             if (ctxt->instate == XML_PARSER_EOF) {
@@ -5186,6 +5190,7 @@ xmlParsePI(xmlParserCtxtPtr ctxt) {
                }
                count++;
                if (count > 50) {
+                   SHRINK;
                    GROW;
                     if (ctxt->instate == XML_PARSER_EOF) {
                         xmlFree(buf);
@@ -9783,6 +9788,7 @@ xmlParseCDSect(xmlParserCtxtPtr ctxt) {
        sl = l;
        count++;
        if (count > 50) {
+           SHRINK;
            GROW;
             if (ctxt->instate == XML_PARSER_EOF) {
                xmlFree(buf);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]