VirtualBox

Changeset 58076 in vbox for trunk


Ignore:
Timestamp:
Oct 7, 2015 9:47:57 AM (9 years ago)
Author:
vboxsync
Message:

upstream fixes post 2.9.2

Location:
trunk/src/libs/libxml2-2.9.2
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/libxml2-2.9.2/buf.c

    r58072 r58076  
    2828#include <libxml/globals.h>
    2929#include <libxml/tree.h>
     30#include <libxml/parserInternals.h> /* for XML_MAX_TEXT_LENGTH */
    3031#include "buf.h"
    3132
     
    300301        (scheme == XML_BUFFER_ALLOC_EXACT) ||
    301302        (scheme == XML_BUFFER_ALLOC_HYBRID) ||
    302         (scheme == XML_BUFFER_ALLOC_IMMUTABLE)) {
     303        (scheme == XML_BUFFER_ALLOC_IMMUTABLE) ||
     304        (scheme == XML_BUFFER_ALLOC_BOUNDED)) {
    303305        buf->alloc = scheme;
    304306        if (buf->buffer)
     
    459461#endif
    460462
     463    if (buf->alloc == XML_BUFFER_ALLOC_BOUNDED) {
     464        /*
     465         * Used to provide parsing limits
     466         */
     467        if ((buf->use + len >= XML_MAX_TEXT_LENGTH) ||
     468            (buf->size >= XML_MAX_TEXT_LENGTH)) {
     469            xmlBufMemoryError(buf, "buffer error: text too long\n");
     470            return(0);
     471        }
     472        if (size >= XML_MAX_TEXT_LENGTH)
     473            size = XML_MAX_TEXT_LENGTH;
     474    }
    461475    if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
    462476        size_t start_buf = buf->content - buf->contentIO;
     
    740754
    741755    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0);
     756    if (buf->alloc == XML_BUFFER_ALLOC_BOUNDED) {
     757        /*
     758         * Used to provide parsing limits
     759         */
     760        if (size >= XML_MAX_TEXT_LENGTH) {
     761            xmlBufMemoryError(buf, "buffer error: text too long\n");
     762            return(0);
     763        }
     764    }
    742765
    743766    /* Don't resize if we don't have to */
     
    868891    needSize = buf->use + len + 2;
    869892    if (needSize > buf->size){
     893        if (buf->alloc == XML_BUFFER_ALLOC_BOUNDED) {
     894            /*
     895             * Used to provide parsing limits
     896             */
     897            if (needSize >= XML_MAX_TEXT_LENGTH) {
     898                xmlBufMemoryError(buf, "buffer error: text too long\n");
     899                return(-1);
     900            }
     901        }
    870902        if (!xmlBufResize(buf, needSize)){
    871903            xmlBufMemoryError(buf, "growing buffer");
     
    939971    needSize = buf->use + len + 2;
    940972    if (needSize > buf->size){
     973        if (buf->alloc == XML_BUFFER_ALLOC_BOUNDED) {
     974            /*
     975             * Used to provide parsing limits
     976             */
     977            if (needSize >= XML_MAX_TEXT_LENGTH) {
     978                xmlBufMemoryError(buf, "buffer error: text too long\n");
     979                return(-1);
     980            }
     981        }
    941982        if (!xmlBufResize(buf, needSize)){
    942983            xmlBufMemoryError(buf, "growing buffer");
  • trunk/src/libs/libxml2-2.9.2/include/libxml/tree.h

    r58072 r58076  
    7777    XML_BUFFER_ALLOC_IMMUTABLE, /* immutable buffer */
    7878    XML_BUFFER_ALLOC_IO,        /* special allocation scheme used for I/O */
    79     XML_BUFFER_ALLOC_HYBRID     /* exact up to a threshold, and doubleit thereafter */
     79    XML_BUFFER_ALLOC_HYBRID,    /* exact up to a threshold, and doubleit thereafter */
     80    XML_BUFFER_ALLOC_BOUNDED    /* limit the upper size of the buffer */
    8081} xmlBufferAllocationScheme;
    8182
  • trunk/src/libs/libxml2-2.9.2/parser.c

    r58072 r58076  
    56595659            xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_NOT_FINISHED,
    56605660                    "xmlParseEntityDecl: entity %s not terminated\n", name);
     5661            xmlStopParser(ctxt);
    56615662        } else {
    56625663            if (input != ctxt->input) {
     
    67706771        if (RAW != '[') {
    67716772            xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID, NULL);
     6773            xmlStopParser(ctxt);
     6774            return;
    67726775        } else {
    67736776            if (ctxt->input->id != id) {
     
    68306833        if (RAW != '[') {
    68316834            xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID, NULL);
     6835            xmlStopParser(ctxt);
     6836            return;
    68326837        } else {
    68336838            if (ctxt->input->id != id) {
     
    68856890    } else {
    68866891        xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID_KEYWORD, NULL);
     6892        xmlStopParser(ctxt);
     6893        return;
    68876894    }
    68886895
     
    72367243     * the document entity by default.
    72377244     */
    7238     if ((ent->checked == 0) &&
     7245    if (((ent->checked == 0) ||
     7246         ((ent->children == NULL) && (ctxt->options & XML_PARSE_NOENT))) &&
    72397247        ((ent->etype != XML_EXTERNAL_GENERAL_PARSED_ENTITY) ||
    72407248         (ctxt->options & (XML_PARSE_NOENT | XML_PARSE_DTDVALID)))) {
     
    1039710405            if (RAW != '"') {
    1039810406                xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
     10407                xmlFree((xmlChar *) encoding);
     10408                return(NULL);
    1039910409            } else
    1040010410                NEXT;
     
    1040410414            if (RAW != '\'') {
    1040510415                xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
     10416                xmlFree((xmlChar *) encoding);
     10417                return(NULL);
    1040610418            } else
    1040710419                NEXT;
     
    1046010472            handler = xmlFindCharEncodingHandler((const char *) encoding);
    1046110473            if (handler != NULL) {
    10462                 xmlSwitchToEncoding(ctxt, handler);
     10474                if (xmlSwitchToEncoding(ctxt, handler) < 0) {
     10475                    /* failed to convert */
     10476                    ctxt->errNo = XML_ERR_UNSUPPORTED_ENCODING;
     10477                    return(NULL);
     10478                }
    1046310479            } else {
    1046410480                xmlFatalErrMsgStr(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
     
    1483114847        xmlXPathInit();
    1483214848#endif
    14833 #ifdef LIBXML_CATALOG_ENABLED
    14834         xmlInitializeCatalog();
    14835 #endif
    1483614849        xmlParserInitialized = 1;
    1483714850#ifdef LIBXML_THREAD_ENABLED
  • trunk/src/libs/libxml2-2.9.2/tree.c

    r58072 r58076  
    28002800            prop = tree->properties;
    28012801            while (prop != NULL) {
     2802                if (prop->atype == XML_ATTRIBUTE_ID) {
     2803                    xmlRemoveID(tree->doc, prop);
     2804                }
     2805
    28022806                prop->doc = doc;
    28032807                xmlSetListDoc(prop->children, doc);
     2808
     2809                if (xmlIsID(doc, tree, prop)) {
     2810                    xmlChar *idVal = xmlNodeListGetString(doc, prop->children,
     2811                                                          1);
     2812                    xmlAddID(NULL, doc, idVal, prop);
     2813                }
     2814
    28042815                prop = prop->next;
    28052816            }
  • trunk/src/libs/libxml2-2.9.2/valid.c

    r58072 r58076  
    26352635         * The id is already defined in this DTD.
    26362636         */
    2637         xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED,
    2638                         "ID %s already defined\n", value, NULL, NULL);
     2637        if (ctxt != NULL) {
     2638            xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED,
     2639                            "ID %s already defined\n", value, NULL, NULL);
     2640        }
    26392641#endif /* LIBXML_VALID_ENABLED */
    26402642        xmlFreeID(ret);
  • trunk/src/libs/libxml2-2.9.2/xmlmemory.c

    r58072 r58076  
    555555int
    556556xmlMemUsed(void) {
    557      return(debugMemSize);
     557    int res;
     558
     559    xmlMutexLock(xmlMemMutex);
     560    res = debugMemSize;
     561    xmlMutexUnlock(xmlMemMutex);
     562    return(res);
    558563}
    559564
     
    568573int
    569574xmlMemBlocks(void) {
    570      return(debugMemBlocks);
     575    int res;
     576
     577    xmlMutexLock(xmlMemMutex);
     578    res = debugMemBlocks;
     579    xmlMutexUnlock(xmlMemMutex);
     580    return(res);
    571581}
    572582
  • trunk/src/libs/libxml2-2.9.2/xmlreader.c

    r58072 r58076  
    20922092        return(NULL);
    20932093    }
     2094    /* no operation on a reader should require a huge buffer */
     2095    xmlBufSetAllocationScheme(ret->buffer,
     2096                              XML_BUFFER_ALLOC_BOUNDED);
    20942097    ret->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
    20952098    if (ret->sax == NULL) {
     
    36173620        case XML_ATTRIBUTE_NODE:{
    36183621            xmlAttrPtr attr = (xmlAttrPtr) node;
     3622            const xmlChar *ret;
    36193623
    36203624            if ((attr->children != NULL) &&
     
    36303634                        return (NULL);
    36313635                    }
     3636                    xmlBufSetAllocationScheme(reader->buffer,
     3637                                              XML_BUFFER_ALLOC_BOUNDED);
    36323638                } else
    36333639                    xmlBufEmpty(reader->buffer);
    36343640                xmlBufGetNodeContent(reader->buffer, node);
    3635                 return(xmlBufContent(reader->buffer));
     3641                ret = xmlBufContent(reader->buffer);
     3642                if (ret == NULL) {
     3643                    /* error on the buffer best to reallocate */
     3644                    xmlBufFree(reader->buffer);
     3645                    reader->buffer = xmlBufCreateSize(100);
     3646                    xmlBufSetAllocationScheme(reader->buffer,
     3647                                              XML_BUFFER_ALLOC_BOUNDED);
     3648                    ret = BAD_CAST "";
     3649                }
     3650                return(ret);
    36363651            }
    36373652            break;
     
    51325147        return (-1);
    51335148    }
     5149    /* no operation on a reader should require a huge buffer */
     5150    xmlBufSetAllocationScheme(reader->buffer,
     5151                              XML_BUFFER_ALLOC_BOUNDED);
    51345152    if (reader->sax == NULL)
    51355153        reader->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
  • trunk/src/libs/libxml2-2.9.2/xmlschemas.c

    r58072 r58076  
    2418724187            goto pattern_and_enum;
    2418824188    }
     24189
    2418924190    /*
    2419024191    * Whitespace handling is only of importance for string-based
     
    2419724198    } else
    2419824199        ws = XML_SCHEMA_WHITESPACE_COLLAPSE;
     24200
    2419924201    /*
    2420024202    * If the value was not computed (for string or
     
    2420224204    * type.
    2420324205    */
    24204     if (val == NULL)
    24205         valType = valType;
    24206     else
     24206    if (val != NULL)
    2420724207        valType = xmlSchemaGetValType(val);
    2420824208
  • trunk/src/libs/libxml2-2.9.2/xpath.c

    r58072 r58076  
    362362     * compute depth to root
    363363     */
    364     for (depth2 = 0, cur = node2;cur->parent != NULL;cur = cur->parent) {
    365         if (cur == node1)
     364    for (depth2 = 0, cur = node2; cur->parent != NULL; cur = cur->parent) {
     365        if (cur->parent == node1)
    366366            return(1);
    367367        depth2++;
    368368    }
    369369    root = cur;
    370     for (depth1 = 0, cur = node1;cur->parent != NULL;cur = cur->parent) {
    371         if (cur == node2)
     370    for (depth1 = 0, cur = node1; cur->parent != NULL; cur = cur->parent) {
     371        if (cur->parent == node2)
    372372            return(-1);
    373373        depth1++;
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