VirtualBox

Changeset 39921 in vbox


Ignore:
Timestamp:
Jan 31, 2012 3:22:08 PM (13 years ago)
Author:
vboxsync
Message:

libxml-2.6.31 upstream fixes

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

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/libxml2-2.6.31/SAX2.c

    r39915 r39921  
    1212#include <stdlib.h>
    1313#include <string.h>
     14#include <limits.h>
    1415#include <libxml/xmlmemory.h>
    1516#include <libxml/tree.h>
     
    24432444                       (xmlDictOwns(ctxt->dict, lastChild->content))) {
    24442445                lastChild->content = xmlStrdup(lastChild->content);
     2446            }
     2447            if (ctxt->nodelen > UINT_MAX - len ||
     2448                ctxt->nodemem + len > UINT_MAX / 2) {
     2449                    xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters overflow prevented");
     2450                    return;
    24452451            }
    24462452            if (ctxt->nodelen + len >= ctxt->nodemem) {
  • trunk/src/libs/libxml2-2.6.31/encoding.c

    r39915 r39921  
    17631763
    17641764    /* calculate space available */
    1765     written = out->size - out->use;
     1765    written = out->size - out->use - 1; /* count '\0' */
    17661766    toconv = in->use;
    17671767    /*
     
    18561856    if (toconv == 0)
    18571857        return (0);
    1858     written = out->size - out->use;
     1858    written = out->size - out->use -1; /* count '\0' */
    18591859    if (toconv * 2 >= written) {
    18601860        xmlBufferGrow(out, out->size + toconv * 2);
  • trunk/src/libs/libxml2-2.6.31/entities.c

    r39915 r39921  
    103103
    104104
    105     if ((entity->children) && (entity->owner == 1) &&
     105    if ((entity->children) && (entity->owner != 0) &&
    106106        (entity == (xmlEntityPtr) entity->children->parent))
    107107        xmlFreeNodeList(entity->children);
  • trunk/src/libs/libxml2-2.6.31/error.c

    r39915 r39921  
    4646            size += chars + 1;                                  \
    4747        else                                                    \
    48             size += 100;                                        \
     48            break;                                              \
    4949        if ((larger = (char *) xmlRealloc(str, size)) == NULL) {\
    5050            break;                                              \
  • trunk/src/libs/libxml2-2.6.31/include/libxml/parser.h

    r39915 r39921  
    298298    xmlError          lastError;
    299299    xmlParserMode     parseMode;    /* the parser mode */
     300    unsigned long    nbentities;    /* number of entities references */
     301    unsigned long  sizeentities;    /* size of parsed entities */
    300302};
    301303
  • trunk/src/libs/libxml2-2.6.31/libxml.h

    r39915 r39921  
    1313#ifndef _LARGEFILE_SOURCE
    1414#define _LARGEFILE_SOURCE
     15#endif
     16#ifndef _LARGEFILE64_SOURCE
     17#define _LARGEFILE64_SOURCE
    1518#endif
    1619#ifndef _FILE_OFFSET_BITS
  • trunk/src/libs/libxml2-2.6.31/nanohttp.c

    r39915 r39921  
    13331333        blen += strlen(headers) + 2;
    13341334    if (contentType && *contentType)
     1335        /* reserve for string plus 'Content-Type: \r\n" */
    13351336        blen += strlen(*contentType) + 16;
    13361337    if (ctxt->query != NULL)
     1338        /* 1 for '?' */
    13371339        blen += strlen(ctxt->query) + 1;
    13381340    blen += strlen(method) + strlen(ctxt->path) + 24;
    13391341#ifdef HAVE_ZLIB_H
     1342    /* reserve for possible 'Accept-Encoding: gzip' string */
    13401343    blen += 23;
    13411344#endif
     1345    if (ctxt->port != 80) {
     1346        /* reserve space for ':xxxxx', incl. potential proxy */
     1347        if (proxy)
     1348            blen += 12;
     1349        else
     1350            blen += 6;
     1351    }
    13421352    bp = (char*)xmlMallocAtomic(blen);
    13431353    if ( bp == NULL ) {
  • trunk/src/libs/libxml2-2.6.31/parser.c

    r39915 r39921  
    8080#include <zlib.h>
    8181#endif
     82
     83static void
     84xmlFatalErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *info);
     85
     86/************************************************************************
     87 *                                                                      *
     88 *      Arbitrary limits set in the parser.                             *
     89 *                                                                      *
     90 ************************************************************************/
     91
     92#define XML_PARSER_BIG_ENTITY 1000
     93#define XML_PARSER_LOT_ENTITY 5000
     94
     95/*
     96 * XML_PARSER_NON_LINEAR is the threshold where the ratio of parsed entity
     97 *    replacement over the size in byte of the input indicates that you have
     98 *    and eponential behaviour. A value of 10 correspond to at least 3 entity
     99 *    replacement per byte of input.
     100 */
     101#define XML_PARSER_NON_LINEAR 10
     102
     103/*
     104 * xmlParserEntityCheck
     105 *
     106 * Function to check non-linear entity expansion behaviour
     107 * This is here to detect and stop exponential linear entity expansion
     108 * This is not a limitation of the parser but a safety
     109 * boundary feature.
     110 */
     111static int
     112xmlParserEntityCheck(xmlParserCtxtPtr ctxt, unsigned long size,
     113                     xmlEntityPtr ent)
     114{
     115    unsigned long consumed = 0;
     116
     117    if (ctxt == NULL)
     118        return (0);
     119    if (ctxt->lastError.code == XML_ERR_ENTITY_LOOP)
     120        return (1);
     121    if (size != 0) {
     122        /*
     123         * Do the check based on the replacement size of the entity
     124         */
     125        if (size < XML_PARSER_BIG_ENTITY)
     126            return(0);
     127
     128        /*
     129         * A limit on the amount of text data reasonably used
     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 ((size < XML_PARSER_NON_LINEAR * consumed) &&
     138            (ctxt->nbentities * 3 < XML_PARSER_NON_LINEAR * consumed))
     139            return (0);
     140    } else if (ent != NULL) {
     141        /*
     142         * use the number of parsed entities in the replacement
     143         */
     144        size = ent->owner;
     145
     146        /*
     147         * The amount of data parsed counting entities size only once
     148         */
     149        if (ctxt->input != NULL) {
     150            consumed = ctxt->input->consumed +
     151                (ctxt->input->cur - ctxt->input->base);
     152        }
     153        consumed += ctxt->sizeentities;
     154
     155        /*
     156         * Check the density of entities for the amount of data
     157         * knowing an entity reference will take at least 3 bytes
     158         */
     159        if (size * 3 < consumed * XML_PARSER_NON_LINEAR)
     160            return (0);
     161    } else {
     162        /*
     163         * strange we got no data for checking just return
     164         */
     165        return (0);
     166    }
     167
     168    xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
     169    return (1);
     170}
    82171
    83172/**
     
    21792268 * Macro used to grow the current buffer.
    21802269 */
    2181 #define growBuffer(buffer) {                                            \
    2182     xmlChar *tmp;                                                       \
    2183     buffer##_size *= 2;                                                 \
    2184     tmp = (xmlChar *)                                                   \
    2185                 xmlRealloc(buffer, buffer##_size * sizeof(xmlChar));    \
    2186     if (tmp == NULL) goto mem_error;                                    \
    2187     buffer = tmp;                                                       \
     2270#define growBuffer(buffer, n) {                                         \
     2271    xmlChar *tmp;                                                       \
     2272    buffer##_size *= 2;                                                 \
     2273    buffer##_size += n;                                                 \
     2274    tmp = (xmlChar *)                                                   \
     2275                xmlRealloc(buffer, buffer##_size * sizeof(xmlChar));    \
     2276    if (tmp == NULL) goto mem_error;                                    \
     2277    buffer = tmp;                                                       \
    21882278}
    21892279
     
    22532343            }
    22542344            if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) {
    2255                 growBuffer(buffer);
     2345                growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
    22562346            }
    22572347        } else if ((c == '&') && (what & XML_SUBSTITUTE_REF)) {
     
    22612351                        str);
    22622352            ent = xmlParseStringEntityRef(ctxt, &str);
     2353            if (ctxt->lastError.code == XML_ERR_ENTITY_LOOP)
     2354                goto int_error;
     2355            if (ent != NULL)
     2356                ctxt->nbentities += ent->owner;
    22632357            if ((ent != NULL) &&
    22642358                (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
     
    22662360                    COPY_BUF(0,buffer,nbchars,ent->content[0]);
    22672361                    if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) {
    2268                         growBuffer(buffer);
     2362                        growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
    22692363                    }
    22702364                } else {
     
    22852379                        if (nbchars >
    22862380                            buffer_size - XML_PARSER_BUFFER_SIZE) {
    2287                             growBuffer(buffer);
     2381                            if (xmlParserEntityCheck(ctxt, nbchars, ent)) {
     2382                                xmlFree(rep);
     2383                                goto int_error;
     2384                            }
     2385                            growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
    22882386                        }
    22892387                    }
     
    22962394                buffer[nbchars++] = '&';
    22972395                if (nbchars > buffer_size - i - XML_PARSER_BUFFER_SIZE) {
    2298                     growBuffer(buffer);
     2396                    growBuffer(buffer, i + XML_PARSER_BUFFER_SIZE);
    22992397                }
    23002398                for (;i > 0;i--)
     
    23072405                        "String decoding PE Reference: %.30s\n", str);
    23082406            ent = xmlParseStringPEReference(ctxt, &str);
     2407            if (ctxt->lastError.code == XML_ERR_ENTITY_LOOP)
     2408                goto int_error;
     2409            if (ent != NULL)
     2410                ctxt->nbentities += ent->owner;
    23092411            if (ent != NULL) {
    23102412                xmlChar *rep;
     
    23202422                        if (nbchars >
    23212423                            buffer_size - XML_PARSER_BUFFER_SIZE) {
    2322                             growBuffer(buffer);
     2424                            if (xmlParserEntityCheck(ctxt, nbchars, ent)) {
     2425                                xmlFree(rep);
     2426                                goto int_error;
     2427                            }
     2428                            growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
    23232429                        }
    23242430                    }
     
    23302436            str += l;
    23312437            if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) {
    2332               growBuffer(buffer);
     2438              growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
    23332439            }
    23342440        }
     
    23432449mem_error:
    23442450    xmlErrMemory(ctxt, NULL);
     2451int_error:
     2452    if (buffer != NULL)
     2453        xmlFree(buffer);
    23452454    return(NULL);
    23462455}
     
    31273236                    if (ctxt->replaceEntities) {
    31283237                        if (len > buf_size - 10) {
    3129                             growBuffer(buf);
     3238                            growBuffer(buf, 10);
    31303239                        }
    31313240                        buf[len++] = '&';
     
    31363245                         */
    31373246                        if (len > buf_size - 10) {
    3138                             growBuffer(buf);
     3247                            growBuffer(buf, 10);
    31393248                        }
    31403249                        buf[len++] = '&';
     
    31463255                } else {
    31473256                    if (len > buf_size - 10) {
    3148                         growBuffer(buf);
     3257                        growBuffer(buf, 10);
    31493258                    }
    31503259                    len += xmlCopyChar(0, &buf[len], val);
     
    31523261            } else {
    31533262                ent = xmlParseEntityRef(ctxt);
     3263                ctxt->nbentities++;
     3264                if (ent != NULL)
     3265                    ctxt->nbentities += ent->owner;
    31543266                if ((ent != NULL) &&
    31553267                    (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
    31563268                    if (len > buf_size - 10) {
    3157                         growBuffer(buf);
     3269                        growBuffer(buf, 10);
    31583270                    }
    31593271                    if ((ctxt->replaceEntities == 0) &&
     
    31803292                                buf[len++] = *current++;
    31813293                                if (len > buf_size - 10) {
    3182                                     growBuffer(buf);
     3294                                    growBuffer(buf, 10);
    31833295                                }
    31843296                            }
     
    31873299                    } else {
    31883300                        if (len > buf_size - 10) {
    3189                             growBuffer(buf);
     3301                            growBuffer(buf, 10);
    31903302                        }
    31913303                        if (ent->content != NULL)
     
    32133325                     */
    32143326                    buf[len++] = '&';
    3215                     if (len > buf_size - i - 10) {
    3216                         growBuffer(buf);
     3327                    while (len > buf_size - i - 10) {
     3328                        growBuffer(buf, i + 10);
    32173329                    }
    32183330                    for (;i > 0;i--)
     
    32273339                        COPY_BUF(l,buf,len,0x20);
    32283340                        if (len > buf_size - 10) {
    3229                             growBuffer(buf);
     3341                            growBuffer(buf, 10);
    32303342                        }
    32313343                    }
     
    32363348                COPY_BUF(l,buf,len,c);
    32373349                if (len > buf_size - 10) {
    3238                     growBuffer(buf);
     3350                    growBuffer(buf, 10);
    32393351                }
    32403352            }
     
    42514363                    ctxt->sax->processingInstruction(ctxt->userData,
    42524364                                                     target, NULL);
    4253                 ctxt->instate = state;
     4365                if (ctxt->instate != XML_PARSER_EOF)
     4366                    ctxt->instate = state;
    42544367                return;
    42554368            }
     
    43314444            xmlFatalErr(ctxt, XML_ERR_PI_NOT_STARTED, NULL);
    43324445        }
    4333         ctxt->instate = state;
     4446        if (ctxt->instate != XML_PARSER_EOF)
     4447            ctxt->instate = state;
    43344448    }
    43354449}
     
    44344548    xmlChar *orig = NULL;
    44354549    int skipped;
     4550    unsigned long oldnbent = ctxt->nbentities;
    44364551   
    44374552    /* GROW; done in the caller */
     
    46434758            }
    46444759            if (cur != NULL) {
     4760                if ((cur->owner != 0) || (cur->children == NULL)) {
     4761                    cur->owner = ctxt->nbentities - oldnbent;
     4762                    if (cur->owner ==  0)
     4763                        cur->owner = 1;
     4764                }
    46454765                if (cur->orig != NULL)
    46464766                    xmlFree(orig);
     
    47534873            xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
    47544874                           "Name expected in NOTATION declaration\n");
    4755             return(ret);
     4875            xmlFreeEnumeration(ret);
     4876            return(NULL);
    47564877        }
    47574878        cur = xmlCreateEnumeration(name);
    4758         if (cur == NULL) return(ret);
     4879        if (cur == NULL) {
     4880            xmlFreeEnumeration(ret);
     4881            return(NULL);
     4882        }
    47594883        if (last == NULL) ret = last = cur;
    47604884        else {
     
    47664890    if (RAW != ')') {
    47674891        xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_FINISHED, NULL);
    4768         if ((last != NULL) && (last != ret))
    4769             xmlFreeEnumeration(last);
    4770         return(ret);
     4892        xmlFreeEnumeration(ret);
     4893        return(NULL);
    47714894    }
    47724895    NEXT;
     
    48094932        cur = xmlCreateEnumeration(name);
    48104933        xmlFree(name);
    4811         if (cur == NULL) return(ret);
     4934        if (cur == NULL) {
     4935            xmlFreeEnumeration(ret);
     4936            return(NULL);
     4937        }
    48124938        if (last == NULL) ret = last = cur;
    48134939        else {
     
    52075333    xmlChar type = 0;
    52085334
     5335    if (ctxt->depth > 128) {
     5336        xmlFatalErrMsgInt(ctxt, XML_ERR_ELEMCONTENT_NOT_FINISHED,
     5337                "xmlParseElementChildrenContentDecl : depth %d too deep\n",
     5338                          ctxt->depth);
     5339        return(NULL);
     5340    }
    52095341    SKIP_BLANKS;
    52105342    GROW;
     
    52155347        NEXT;
    52165348        SKIP_BLANKS;
     5349        ctxt->depth++;
    52175350        cur = ret = xmlParseElementChildrenContentDecl(ctxt, inputid);
     5351        ctxt->depth--;
    52185352        SKIP_BLANKS;
    52195353        GROW;
     
    53455479            NEXT;
    53465480            SKIP_BLANKS;
     5481            ctxt->depth++;
    53475482            last = xmlParseElementChildrenContentDecl(ctxt, inputid);
     5483            ctxt->depth--;
    53485484            SKIP_BLANKS;
    53495485        } else {
     
    60726208                            ent->children = list;
    60736209                            ent->last = list;
    6074                             ent->owner = 1;
     6210                            if (ent->owner == 0)
     6211                                ent->owner = 1;
    60756212                            list->parent = (xmlNodePtr) ent;
    60766213                        } else {
     
    60816218                    }
    60826219                } else {
     6220                    unsigned long oldnbent = ctxt->nbentities;
    60836221                    /*
    60846222                     * 4.3.2: An internal general parsed entity is well-formed
     
    61036241                                           value, user_data, &list);
    61046242                        ctxt->depth--;
     6243
    61056244                    } else if (ent->etype ==
    61066245                               XML_EXTERNAL_GENERAL_PARSED_ENTITY) {
     
    61146253                        xmlErrMsgStr(ctxt, XML_ERR_INTERNAL_ERROR,
    61156254                                     "invalid entity type found\n", NULL);
     6255                    }
     6256                    /*
     6257                     * Store the number of entities needing parsing for entity
     6258                     * content and do checkings
     6259                     */
     6260                    if ((ent->owner != 0) || (ent->children == NULL)) {
     6261                        ent->owner = ctxt->nbentities - oldnbent;
     6262                        if (ent->owner == 0)
     6263                            ent->owner = 1;
     6264                    }
     6265                    if (ret == XML_ERR_ENTITY_LOOP) {
     6266                        xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
     6267                        xmlFreeNodeList(list);
     6268                        return;
     6269                    }
     6270                    if (xmlParserEntityCheck(ctxt, 0, ent)) {
     6271                        xmlFreeNodeList(list);
     6272                        return;
    61166273                    }
    61176274                    if (ret == XML_ERR_ENTITY_LOOP) {
     
    61336290                                    list->parent = (xmlNodePtr) ent;
    61346291                                    list = NULL;
    6135                                     ent->owner = 1;
     6292                                    if (ent->owner == 0)
     6293                                        ent->owner = 1;
    61366294                                } else {
    61376295                                    ent->owner = 0;
     
    61506308                                }
    61516309                            } else {
    6152                                 ent->owner = 1;
     6310                                if (ent->owner == 0)
     6311                                    ent->owner = 1;
    61536312                                while (list != NULL) {
    61546313                                    list->parent = (xmlNodePtr) ent;
     
    61696328                        xmlFreeNodeList(list);
    61706329                        list = NULL;
     6330                    } else if (ent->owner != 1) {
     6331                        ctxt->nbentities += ent->owner;
    61716332                    }
    61726333                }
     
    63276488                            cur = next;
    63286489                        }
    6329                         ent->owner = 1;
     6490                        if (ent->owner == 0)
     6491                            ent->owner = 1;
    63306492#ifdef LIBXML_LEGACY_ENABLED
    63316493                        if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)                         
     
    64166578            if (RAW == ';') {
    64176579                NEXT;
     6580                /*
     6581                 * Increase the number of entity references parsed
     6582                 */
     6583                ctxt->nbentities++;
     6584
    64186585                /*
    64196586                 * Ask first SAX for entity resolution, otherwise try the
     
    65886755                ptr++;
    65896756                /*
     6757                 * Increase the number of entity references parsed
     6758                 */
     6759                ctxt->nbentities++;
     6760                /*
    65906761                 * Ask first SAX for entity resolution, otherwise try the
    65916762                 * predefined set.
     
    67496920            if (RAW == ';') {
    67506921                NEXT;
     6922                /*
     6923                 * Increase the number of entity references parsed
     6924                 */
     6925                ctxt->nbentities++;
     6926
    67516927                if ((ctxt->sax != NULL) &&
    67526928                    (ctxt->sax->getParameterEntity != NULL))
     
    68797055                ptr++;
    68807056                cur = *ptr;
     7057                /*
     7058                 * Increase the number of entity references parsed
     7059                 */
     7060                ctxt->nbentities++;
     7061
    68817062                if ((ctxt->sax != NULL) &&
    68827063                    (ctxt->sax->getParameterEntity != NULL))
     
    86108791        name = xmlParseStartTag(ctxt);
    86118792#endif /* LIBXML_SAX1_ENABLED */
     8793    if (ctxt->instate == XML_PARSER_EOF)
     8794        return;
    86128795    if (name == NULL) {
    86138796        spacePop(ctxt);
     
    993210115                    name = xmlParseStartTag(ctxt);
    993310116#endif /* LIBXML_SAX1_ENABLED */
     10117                if (ctxt->instate == XML_PARSER_EOF)
     10118                    goto done;
    993410119                if (name == NULL) {
    993510120                    spacePop(ctxt);
     
    1011810303                    xmlParseEndTag1(ctxt, 0);
    1011910304#endif /* LIBXML_SAX1_ENABLED */
    10120                 if (ctxt->nameNr == 0) {
     10305                if (ctxt->instate == XML_PARSER_EOF) {
     10306                    /* Nothing */
     10307                } else if (ctxt->nameNr == 0) {
    1012110308                    ctxt->instate = XML_PARSER_EPILOG;
    1012210309                } else {
     
    1153811725        ret = XML_ERR_OK;
    1153911726    }
     11727
     11728    /*
     11729     * Record in the parent context the number of entities replacement
     11730     * done when parsing that reference.
     11731     */
     11732    oldctxt->nbentities += ctxt->nbentities;
     11733    /*
     11734     * Also record the size of the entity parsed
     11735     */
     11736    if (ctxt->input != NULL) {
     11737        oldctxt->sizeentities += ctxt->input->consumed;
     11738        oldctxt->sizeentities += (ctxt->input->cur - ctxt->input->base);
     11739    }
     11740    /*
     11741     * And record the last error if any
     11742     */
     11743    if (ctxt->lastError.code != XML_ERR_OK)
     11744        xmlCopyError(&ctxt->lastError, &oldctxt->lastError);
     11745
    1154011746    if (sax != NULL)
    1154111747        ctxt->sax = oldsax;
     
    1154311749    oldctxt->node_seq.length = ctxt->node_seq.length;
    1154411750    oldctxt->node_seq.buffer = ctxt->node_seq.buffer;
     11751    oldctxt->nbentities += ctxt->nbentities;
    1154511752    ctxt->node_seq.maximum = 0;
    1154611753    ctxt->node_seq.length = 0;
     
    1176711974    }
    1176811975       
     11976    /*
     11977     * Record in the parent context the number of entities replacement
     11978     * done when parsing that reference.
     11979     */
     11980    oldctxt->nbentities += ctxt->nbentities;
     11981    /*
     11982     * Also record the last error if any
     11983     */
     11984    if (ctxt->lastError.code != XML_ERR_OK)
     11985        xmlCopyError(&ctxt->lastError, &oldctxt->lastError);
     11986
    1176911987    ctxt->sax = oldsax;
    1177011988    ctxt->dict = NULL;
     
    1307813296    ctxt->charset = XML_CHAR_ENCODING_UTF8;
    1307913297    ctxt->catalogs = NULL;
     13298    ctxt->nbentities = 0;
     13299    ctxt->sizeentities = 0;
    1308013300    xmlInitNodeInfoSeq(&ctxt->node_seq);
    1308113301
  • trunk/src/libs/libxml2-2.6.31/parserInternals.c

    r39915 r39921  
    14001400        return(NULL);
    14011401    }
    1402     input->filename = (char *) entity->URI;
     1402    if (entity->URI != NULL)
     1403        input->filename = (char *) xmlStrdup((xmlChar *) entity->URI);
    14031404    input->base = entity->content;
    14041405    input->cur = entity->content;
     
    16701671    ctxt->charset = XML_CHAR_ENCODING_UTF8;
    16711672    ctxt->catalogs = NULL;
     1673    ctxt->nbentities = 0;
    16721674    xmlInitNodeInfoSeq(&ctxt->node_seq);
    16731675    return(0);
  • trunk/src/libs/libxml2-2.6.31/tree.c

    r39915 r39921  
    1515
    1616#include <string.h> /* for memset() only ! */
    17 
     17#include <limits.h>
    1818#ifdef HAVE_CTYPE_H
    1919#include <ctype.h>
     
    68996899        /*take care of empty case*/
    69006900        newSize = (buf->size ? buf->size*2 : size + 10);
    6901         while (size > newSize) newSize *= 2;
     6901        while (size > newSize) {
     6902            if (newSize > UINT_MAX / 2) {
     6903                xmlTreeErrMemory("growing buffer");
     6904                return 0;
     6905            }
     6906            newSize *= 2;
     6907        }
    69026908        break;
    69036909    case XML_BUFFER_ALLOC_EXACT:
  • trunk/src/libs/libxml2-2.6.31/xmllint.c

    r39915 r39921  
    28352835    printf("\t--noent : substitute entity references by their value\n");
    28362836    printf("\t--noout : don't output the result tree\n");
    2837     printf("\t--path 'paths': provide a set of paths for resources\n");
     2837    printf("\t--path 'paths' : provide a set of paths for resources\n");
    28382838    printf("\t--load-trace : print trace of all external entites loaded\n");
    28392839    printf("\t--nonet : refuse to fetch DTDs or entities over network\n");
     
    28852885    printf("\t             otherwise XML Catalogs starting from \n");
    28862886    printf("\t         %s are activated by default\n", XML_XML_DEFAULT_CATALOG);
    2887     printf("\t--nocatalogs: deactivate all catalogs\n");
     2887    printf("\t--nocatalogs : deactivate all catalogs\n");
    28882888#endif
    28892889    printf("\t--auto : generate a small doc on the fly\n");
     
    29102910#endif
    29112911#ifdef LIBXML_SAX1_ENABLED
    2912     printf("\t--sax1: use the old SAX1 interfaces for processing\n");
    2913 #endif
    2914     printf("\t--sax: do not build a tree but work just at the SAX level\n");
     2912    printf("\t--sax1 : use the old SAX1 interfaces for processing\n");
     2913#endif
     2914    printf("\t--sax : do not build a tree but work just at the SAX level\n");
    29152915
    29162916    printf("\nLibxml project home page: http://xmlsoft.org/\n");
  • trunk/src/libs/libxml2-2.6.31/xpath.c

    r39915 r39921  
    24432443        if (tmp == NULL) {
    24442444            xmlGenericError(xmlGenericErrorContext, "realloc failed !\n");
     2445            ctxt->error = XPATH_MEMORY_ERROR;
    24452446            return (0);
    24462447        }
     
    35233524        xmlNodePtr *temp;
    35243525
    3525         cur->nodeMax *= 2;
    3526         temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax *
     3526        temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 *
    35273527                                      sizeof(xmlNodePtr));
    35283528        if (temp == NULL) {
     
    35303530            return;
    35313531        }
     3532        cur->nodeMax *= 2;
    35323533        cur->nodeTab = temp;
    35333534    }
     
    36283629        xmlNodePtr *temp;
    36293630
    3630         cur->nodeMax *= 2;
    3631         temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax *
     3631        temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 *
    36323632                                      sizeof(xmlNodePtr));
    36333633        if (temp == NULL) {
     
    36363636        }
    36373637        cur->nodeTab = temp;
     3638        cur->nodeMax *= 2;
    36383639    }
    36393640    if (val->type == XML_NAMESPACE_DECL) {
     
    37373738            xmlNodePtr *temp;
    37383739
    3739             val1->nodeMax *= 2;
    3740             temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax *
     3740            temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax * 2 *
    37413741                                             sizeof(xmlNodePtr));
    37423742            if (temp == NULL) {
     
    37453745            }
    37463746            val1->nodeTab = temp;
     3747            val1->nodeMax *= 2;
    37473748        }
    37483749        if (n2->type == XML_NAMESPACE_DECL) {
     
    39023903                xmlNodePtr *temp;
    39033904               
    3904                 set1->nodeMax *= 2;
    39053905                temp = (xmlNodePtr *) xmlRealloc(
    3906                     set1->nodeTab, set1->nodeMax * sizeof(xmlNodePtr));
     3906                    set1->nodeTab, set1->nodeMax * 2 * sizeof(xmlNodePtr));
    39073907                if (temp == NULL) {
    39083908                    xmlXPathErrMemory(NULL, "merging nodeset\n");
     
    39103910                }
    39113911                set1->nodeTab = temp;
     3912                set1->nodeMax *= 2;
    39123913            }
    39133914            if (n2->type == XML_NAMESPACE_DECL) {
     
    39843985                xmlNodePtr *temp;
    39853986               
    3986                 set1->nodeMax *= 2;
    39873987                temp = (xmlNodePtr *) xmlRealloc(
    3988                     set1->nodeTab, set1->nodeMax * sizeof(xmlNodePtr));
     3988                    set1->nodeTab, set1->nodeMax * 2 * sizeof(xmlNodePtr));
    39893989                if (temp == NULL) {
    39903990                    xmlXPathErrMemory(NULL, "merging nodeset\n");
     
    39923992                }
    39933993                set1->nodeTab = temp;
     3994                set1->nodeMax *= 2;
    39943995            }
    39953996            set1->nodeTab[set1->nodeNr++] = n2;
     
    80888089xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
    80898090    if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
    8090     if (cur != NULL && cur->children != NULL)
    8091         return cur->children ;
    8092     if (cur == NULL) cur = ctxt->context->node;
     8091    if ((cur != NULL) && (cur->type  != XML_ATTRIBUTE_NODE) &&
     8092        (cur->type != XML_NAMESPACE_DECL) && (cur->children != NULL))
     8093        return(cur->children);
     8094
     8095    if (cur == NULL) {
     8096        cur = ctxt->context->node;
     8097        if (cur->type == XML_NAMESPACE_DECL)
     8098            return(NULL);
     8099        if (cur->type == XML_ATTRIBUTE_NODE)
     8100            cur = cur->parent;
     8101    }
    80938102    if (cur == NULL) return(NULL) ; /* ERROR */
    80948103    if (cur->next != NULL) return(cur->next) ;
     
    81448153{
    81458154    if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
    8146     if (cur == NULL)
     8155    if (cur == NULL) {
    81478156        cur = ctxt->context->node;
     8157        if (cur->type == XML_NAMESPACE_DECL)
     8158            return(NULL);
     8159        if (cur->type == XML_ATTRIBUTE_NODE)
     8160            return(cur->parent);
     8161    }
    81488162    if (cur == NULL)
    81498163        return (NULL);
     
    81898203        if (cur == NULL)
    81908204            return (NULL);
    8191         if (cur->type == XML_NAMESPACE_DECL)
    8192             cur = (xmlNodePtr)((xmlNsPtr)cur)->next;
     8205        if (cur->type == XML_NAMESPACE_DECL)
     8206            return (NULL);
    81938207        ctxt->ancestor = cur->parent;
    81948208    }
     
    92589272                    xmlGenericError(xmlGenericErrorContext,
    92599273                        "xmlXPathTranslateFunction: Invalid UTF8 string\n");
     9274                    /* not asserting an XPath error is probably better */
    92609275                    break;
    92619276                }
     
    92659280                        xmlGenericError(xmlGenericErrorContext,
    92669281                            "xmlXPathTranslateFunction: Invalid UTF8 string\n");
     9282                        /* not asserting an XPath error is probably better */
    92679283                        break;
    92689284                    }
     
    1330213318                                        "xmlXPathCompOpEval: variable %s bound to undefined prefix %s\n",
    1330313319                                        op->value4, op->value5);
     13320                        ctxt->error = XPATH_UNDEF_PREFIX_ERROR;
    1330413321                        return (total);
    1330513322                    }
     
    1335013367                                            "xmlXPathCompOpEval: function %s bound to undefined prefix %s\n",
    1335113368                                            op->value4, op->value5);
     13369                            ctxt->error = XPATH_UNDEF_PREFIX_ERROR;
    1335213370                            return (total);
    1335313371                        }
     
    1392713945    xmlGenericError(xmlGenericErrorContext,
    1392813946                    "XPath: unknown precompiled operation %d\n", op->op);
     13947    ctxt->error = XPATH_INVALID_OPERAND;
    1392913948    return (total);
    1393013949}
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