VirtualBox

Changeset 45449 in vbox for trunk/src/libs/libxml2-2.6.31


Ignore:
Timestamp:
Apr 10, 2013 8:39:01 AM (12 years ago)
Author:
vboxsync
Message:

libxml2: fixes from upstream

Location:
trunk/src/libs/libxml2-2.6.31
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/libxml2-2.6.31/include/libxml/parser.h

    r39921 r45449  
    300300    unsigned long    nbentities;    /* number of entities references */
    301301    unsigned long  sizeentities;    /* size of parsed entities */
     302    unsigned long      sizeentcopy;   /* volume of entity copy */
    302303};
    303304
  • trunk/src/libs/libxml2-2.6.31/include/libxml/parserInternals.h

    r39915 r45449  
    3030 */
    3131XMLPUBVAR unsigned int xmlParserMaxDepth;
     32
     33/**
     34 * XML_MAX_TEXT_LENGTH:
     35 *
     36 * Maximum size allowed for a single text node when building a tree.
     37 * This is not a limitation of the parser but a safety boundary feature,
     38 * use XML_PARSE_HUGE option to override it.
     39 */
     40#define XML_MAX_TEXT_LENGTH 10000000
    3241
    3342 /**
  • trunk/src/libs/libxml2-2.6.31/parser.c

    r44084 r45449  
    112112static int
    113113xmlParserEntityCheck(xmlParserCtxtPtr ctxt, size_t size,
    114                      xmlEntityPtr ent)
     114                     xmlEntityPtr ent, size_t replacement)
    115115{
    116116    size_t consumed = 0;
     
    120120    if (ctxt->lastError.code == XML_ERR_ENTITY_LOOP)
    121121        return (1);
    122     if (size != 0) {
     122    if (replacement != 0) {
     123        if (replacement < XML_MAX_TEXT_LENGTH)
     124            return(0);
     125
     126        /*
     127         * If the volume of entity copy reaches 10 times the
     128         * amount of parsed data and over the large text threshold
     129         * then that's very likely to be an abuse.
     130         */
     131        if (ctxt->input != NULL) {
     132            consumed = ctxt->input->consumed +
     133                       (ctxt->input->cur - ctxt->input->base);
     134        }
     135        consumed += ctxt->sizeentities;
     136
     137        if (replacement < XML_PARSER_NON_LINEAR * consumed)
     138            return(0);
     139    } else if (size != 0) {
    123140        /*
    124141         * Do the check based on the replacement size of the entity
     
    166183        return (0);
    167184    }
    168 
    169185    xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
    170186    return (1);
     
    23792395                        buffer[nbchars++] = *current++;
    23802396                        if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
    2381                             if (xmlParserEntityCheck(ctxt, nbchars, ent)) {
     2397                            if (xmlParserEntityCheck(ctxt, nbchars, ent, 0)) {
    23822398                                xmlFree(rep);
    23832399                                goto int_error;
     
    24212437                        buffer[nbchars++] = *current++;
    24222438                        if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
    2423                             if (xmlParserEntityCheck(ctxt, nbchars, ent)) {
     2439                            if (xmlParserEntityCheck(ctxt, nbchars, ent, 0)) {
    24242440                                xmlFree(rep);
    24252441                                goto int_error;
     
    62786294                        return;
    62796295                    }
    6280                     if (xmlParserEntityCheck(ctxt, 0, ent)) {
     6296                    if (xmlParserEntityCheck(ctxt, 0, ent, 0)) {
    62816297                        xmlFreeNodeList(list);
    62826298                        return;
     
    64316447
    64326448                        /*
     6449                         * We are copying here, make sure there is no abuse
     6450                         */
     6451                        ctxt->sizeentcopy += ent->length;
     6452                        if (xmlParserEntityCheck(ctxt, 0, ent, ctxt->sizeentcopy))
     6453                            return;
     6454
     6455                        /*
    64336456                         * when operating on a reader, the entities definitions
    64346457                         * are always owning the entities subtree.
     
    64706493                        xmlNodePtr nw = NULL, cur, next, last,
    64716494                                   firstChild = NULL;
     6495
     6496                        /*
     6497                         * We are copying here, make sure there is no abuse
     6498                         */
     6499                        ctxt->sizeentcopy += ent->length;
     6500                        if (xmlParserEntityCheck(ctxt, 0, ent, ctxt->sizeentcopy))
     6501                            return;
     6502
    64726503                        /*
    64736504                         * Copy the entity child list and make it the new
     
    1330813339    ctxt->nbentities = 0;
    1330913340    ctxt->sizeentities = 0;
     13341    ctxt->sizeentcopy = 0;
    1331013342    xmlInitNodeInfoSeq(&ctxt->node_seq);
    1331113343
  • trunk/src/libs/libxml2-2.6.31/parserInternals.c

    r39921 r45449  
    16721672    ctxt->catalogs = NULL;
    16731673    ctxt->nbentities = 0;
     1674    ctxt->sizeentities = 0;
     1675    ctxt->sizeentcopy = 0;
    16741676    xmlInitNodeInfoSeq(&ctxt->node_seq);
    16751677    return(0);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette