| Index: third_party/libxml/src/valid.c
|
| diff --git a/third_party/libxml/src/valid.c b/third_party/libxml/src/valid.c
|
| index 2cb32f32c841f98e7ce425a308a3d18d4cafa959..409aa81dad69e2353ee5698799de0b62e0b4c5ca 100644
|
| --- a/third_party/libxml/src/valid.c
|
| +++ b/third_party/libxml/src/valid.c
|
| @@ -31,7 +31,7 @@ static xmlElementPtr xmlGetDtdElementDesc2(xmlDtdPtr dtd, const xmlChar *name,
|
| /* #define DEBUG_VALID_ALGO */
|
| /* #define DEBUG_REGEXP_ALGO */
|
|
|
| -#define TODO \
|
| +#define TODO \
|
| xmlGenericError(xmlGenericErrorContext, \
|
| "Unimplemented block at %s:%d\n", \
|
| __FILE__, __LINE__);
|
| @@ -301,7 +301,7 @@ vstateVPush(xmlValidCtxtPtr ctxt, xmlElementPtr elemDecl, xmlNodePtr node) {
|
| if (elemDecl->contModel == NULL)
|
| xmlValidBuildContentModel(ctxt, elemDecl);
|
| if (elemDecl->contModel != NULL) {
|
| - ctxt->vstateTab[ctxt->vstateNr].exec =
|
| + ctxt->vstateTab[ctxt->vstateNr].exec =
|
| xmlRegNewExecCtxt(elemDecl->contModel, NULL, NULL);
|
| } else {
|
| ctxt->vstateTab[ctxt->vstateNr].exec = NULL;
|
| @@ -623,7 +623,7 @@ xmlValidStateDebug(xmlValidCtxtPtr ctxt) {
|
| #define DEBUG_VALID_STATE(n,c) xmlValidStateDebug(ctxt);
|
| #define DEBUG_VALID_MSG(m) \
|
| xmlGenericError(xmlGenericErrorContext, "%s\n", m);
|
| -
|
| +
|
| #else
|
| #define DEBUG_VALID_STATE(n,c)
|
| #define DEBUG_VALID_MSG(m)
|
| @@ -676,7 +676,7 @@ xmlValidBuildAContentModel(xmlElementContentPtr content,
|
| xmlAutomataStatePtr oldstate = ctxt->state;
|
| xmlChar fn[50];
|
| xmlChar *fullname;
|
| -
|
| +
|
| fullname = xmlBuildQName(content->name, content->prefix, fn, 50);
|
| if (fullname == NULL) {
|
| xmlVErrMemory(ctxt, "Building content model");
|
| @@ -701,9 +701,9 @@ xmlValidBuildAContentModel(xmlElementContentPtr content,
|
| break;
|
| case XML_ELEMENT_CONTENT_MULT:
|
| ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
|
| - ctxt->state, NULL);
|
| + ctxt->state, NULL);
|
| xmlAutomataNewTransition(ctxt->am,
|
| - ctxt->state, ctxt->state, fullname, NULL);
|
| + ctxt->state, ctxt->state, fullname, NULL);
|
| break;
|
| }
|
| if ((fullname != fn) && (fullname != content->name))
|
| @@ -752,7 +752,7 @@ xmlValidBuildAContentModel(xmlElementContentPtr content,
|
| xmlElementContentOccur ocur;
|
|
|
| ocur = content->ocur;
|
| - if ((ocur == XML_ELEMENT_CONTENT_PLUS) ||
|
| + if ((ocur == XML_ELEMENT_CONTENT_PLUS) ||
|
| (ocur == XML_ELEMENT_CONTENT_MULT)) {
|
| ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
|
| ctxt->state, NULL);
|
| @@ -944,7 +944,7 @@ xmlNewDocElementContent(xmlDocPtr doc, const xmlChar *name,
|
| }
|
| break;
|
| default:
|
| - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| "Internal: ELEMENT content corrupted invalid type\n",
|
| NULL);
|
| return(NULL);
|
| @@ -1001,7 +1001,7 @@ xmlNewElementContent(const xmlChar *name, xmlElementContentType type) {
|
| * @cur: An element content pointer.
|
| *
|
| * Build a copy of an element content description.
|
| - *
|
| + *
|
| * Returns the new xmlElementContentPtr or NULL in case of error.
|
| */
|
| xmlElementContentPtr
|
| @@ -1028,7 +1028,7 @@ xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) {
|
| else
|
| ret->name = xmlStrdup(cur->name);
|
| }
|
| -
|
| +
|
| if (cur->prefix != NULL) {
|
| if (dict)
|
| ret->prefix = xmlDictLookup(dict, cur->prefix, -1);
|
| @@ -1058,7 +1058,7 @@ xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) {
|
| else
|
| tmp->name = xmlStrdup(cur->name);
|
| }
|
| -
|
| +
|
| if (cur->prefix != NULL) {
|
| if (dict)
|
| tmp->prefix = xmlDictLookup(dict, cur->prefix, -1);
|
| @@ -1082,7 +1082,7 @@ xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) {
|
| *
|
| * Build a copy of an element content description.
|
| * Deprecated, use xmlCopyDocElementContent instead
|
| - *
|
| + *
|
| * Returns the new xmlElementContentPtr or NULL in case of error.
|
| */
|
| xmlElementContentPtr
|
| @@ -1114,7 +1114,7 @@ xmlFreeDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) {
|
| case XML_ELEMENT_CONTENT_OR:
|
| break;
|
| default:
|
| - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| "Internal: ELEMENT content corrupted invalid type\n",
|
| NULL);
|
| return;
|
| @@ -1200,7 +1200,7 @@ xmlDumpElementContent(xmlBufferPtr buf, xmlElementContentPtr content, int glob)
|
| xmlDumpElementContent(buf, content->c2, 0);
|
| break;
|
| default:
|
| - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| "Internal: ELEMENT content corrupted invalid type\n",
|
| NULL);
|
| }
|
| @@ -1397,7 +1397,7 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt,
|
| switch (type) {
|
| case XML_ELEMENT_TYPE_EMPTY:
|
| if (content != NULL) {
|
| - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| "xmlAddElementDecl: content != NULL for EMPTY\n",
|
| NULL);
|
| return(NULL);
|
| @@ -1405,7 +1405,7 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt,
|
| break;
|
| case XML_ELEMENT_TYPE_ANY:
|
| if (content != NULL) {
|
| - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| "xmlAddElementDecl: content != NULL for ANY\n",
|
| NULL);
|
| return(NULL);
|
| @@ -1413,7 +1413,7 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt,
|
| break;
|
| case XML_ELEMENT_TYPE_MIXED:
|
| if (content == NULL) {
|
| - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| "xmlAddElementDecl: content == NULL for MIXED\n",
|
| NULL);
|
| return(NULL);
|
| @@ -1421,14 +1421,14 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt,
|
| break;
|
| case XML_ELEMENT_TYPE_ELEMENT:
|
| if (content == NULL) {
|
| - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| "xmlAddElementDecl: content == NULL for ELEMENT\n",
|
| NULL);
|
| return(NULL);
|
| }
|
| break;
|
| default:
|
| - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| "Internal: ELEMENT decl corrupted invalid type\n",
|
| NULL);
|
| return(NULL);
|
| @@ -1608,7 +1608,7 @@ xmlFreeElementTable(xmlElementTablePtr table) {
|
| * @elem: An element
|
| *
|
| * Build a copy of an element.
|
| - *
|
| + *
|
| * Returns the new xmlElementPtr or NULL in case of error.
|
| */
|
| static xmlElementPtr
|
| @@ -1642,7 +1642,7 @@ xmlCopyElement(xmlElementPtr elem) {
|
| * @table: An element table
|
| *
|
| * Build a copy of an element table.
|
| - *
|
| + *
|
| * Returns the new xmlElementTablePtr or NULL in case of error.
|
| */
|
| xmlElementTablePtr
|
| @@ -1707,7 +1707,7 @@ xmlDumpElementDecl(xmlBufferPtr buf, xmlElementPtr elem) {
|
| xmlBufferWriteChar(buf, ">\n");
|
| break;
|
| default:
|
| - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| "Internal: ELEMENT struct corrupted invalid type\n",
|
| NULL);
|
| }
|
| @@ -1798,6 +1798,7 @@ xmlCopyEnumeration(xmlEnumerationPtr cur) {
|
|
|
| if (cur == NULL) return(NULL);
|
| ret = xmlCreateEnumeration((xmlChar *) cur->name);
|
| + if (ret == NULL) return(NULL);
|
|
|
| if (cur->next != NULL) ret->next = xmlCopyEnumeration(cur->next);
|
| else ret->next = NULL;
|
| @@ -1818,7 +1819,7 @@ static void
|
| xmlDumpEnumeration(xmlBufferPtr buf, xmlEnumerationPtr cur) {
|
| if ((buf == NULL) || (cur == NULL))
|
| return;
|
| -
|
| +
|
| xmlBufferWriteCHAR(buf, cur->name);
|
| if (cur->next == NULL)
|
| xmlBufferWriteChar(buf, ")");
|
| @@ -1973,13 +1974,13 @@ xmlAddAttributeDecl(xmlValidCtxtPtr ctxt,
|
| case XML_ATTRIBUTE_NOTATION:
|
| break;
|
| default:
|
| - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
|
| "Internal: ATTRIBUTE struct corrupted invalid type\n",
|
| NULL);
|
| xmlFreeEnumeration(tree);
|
| return(NULL);
|
| }
|
| - if ((defaultValue != NULL) &&
|
| + if ((defaultValue != NULL) &&
|
| (!xmlValidateAttributeValueInternal(dtd->doc, type, defaultValue))) {
|
| xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ATTRIBUTE_DEFAULT,
|
| "Attribute %s of %s: invalid default value\n",
|
| @@ -2153,7 +2154,7 @@ xmlFreeAttributeTable(xmlAttributeTablePtr table) {
|
| * @attr: An attribute
|
| *
|
| * Build a copy of an attribute.
|
| - *
|
| + *
|
| * Returns the new xmlAttributePtr or NULL in case of error.
|
| */
|
| static xmlAttributePtr
|
| @@ -2186,7 +2187,7 @@ xmlCopyAttribute(xmlAttributePtr attr) {
|
| * @table: An attribute table
|
| *
|
| * Build a copy of an attribute table.
|
| - *
|
| + *
|
| * Returns the new xmlAttributeTablePtr or NULL in case of error.
|
| */
|
| xmlAttributeTablePtr
|
| @@ -2251,7 +2252,7 @@ xmlDumpAttributeDecl(xmlBufferPtr buf, xmlAttributePtr attr) {
|
| xmlDumpEnumeration(buf, attr->tree);
|
| break;
|
| default:
|
| - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| "Internal: ATTRIBUTE struct corrupted invalid type\n",
|
| NULL);
|
| }
|
| @@ -2268,7 +2269,7 @@ xmlDumpAttributeDecl(xmlBufferPtr buf, xmlAttributePtr attr) {
|
| xmlBufferWriteChar(buf, " #FIXED");
|
| break;
|
| default:
|
| - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
|
| "Internal: ATTRIBUTE struct corrupted invalid def\n",
|
| NULL);
|
| }
|
| @@ -2398,7 +2399,7 @@ xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd,
|
| */
|
| if (xmlHashAddEntry(table, name, ret)) {
|
| #ifdef LIBXML_VALID_ENABLED
|
| - xmlErrValid(NULL, XML_DTD_NOTATION_REDEFINED,
|
| + xmlErrValid(NULL, XML_DTD_NOTATION_REDEFINED,
|
| "xmlAddNotationDecl: %s already defined\n",
|
| (const char *) name);
|
| #endif /* LIBXML_VALID_ENABLED */
|
| @@ -2425,7 +2426,7 @@ xmlFreeNotationTable(xmlNotationTablePtr table) {
|
| * @nota: A notation
|
| *
|
| * Build a copy of a notation.
|
| - *
|
| + *
|
| * Returns the new xmlNotationPtr or NULL in case of error.
|
| */
|
| static xmlNotationPtr
|
| @@ -2457,7 +2458,7 @@ xmlCopyNotation(xmlNotationPtr nota) {
|
| * @table: A notation table
|
| *
|
| * Build a copy of a notation table.
|
| - *
|
| + *
|
| * Returns the new xmlNotationTablePtr or NULL in case of error.
|
| */
|
| xmlNotationTablePtr
|
| @@ -2535,7 +2536,7 @@ xmlDumpNotationTable(xmlBufferPtr buf, xmlNotationTablePtr table) {
|
| * current scope
|
| */
|
| #define DICT_FREE(str) \
|
| - if ((str) && ((!dict) || \
|
| + if ((str) && ((!dict) || \
|
| (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
|
| xmlFree((char *)(str));
|
|
|
| @@ -2573,7 +2574,7 @@ xmlFreeID(xmlIDPtr id) {
|
| *
|
| * Returns NULL if not, otherwise the new xmlIDPtr
|
| */
|
| -xmlIDPtr
|
| +xmlIDPtr
|
| xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
|
| xmlAttrPtr attr) {
|
| xmlIDPtr ret;
|
| @@ -2633,11 +2634,8 @@ xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
|
| /*
|
| * The id is already defined in this DTD.
|
| */
|
| - if ((ctxt != NULL) && (ctxt->error != NULL)) {
|
| - xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED,
|
| - "ID %s already defined\n",
|
| - value, NULL, NULL);
|
| - }
|
| + xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED,
|
| + "ID %s already defined\n", value, NULL, NULL);
|
| #endif /* LIBXML_VALID_ENABLED */
|
| xmlFreeID(ret);
|
| return(NULL);
|
| @@ -2687,7 +2685,7 @@ xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
|
| ((xmlStrEqual(BAD_CAST "name", attr->name)) &&
|
| ((elem == NULL) || (xmlStrEqual(elem->name, BAD_CAST "a")))))
|
| return(1);
|
| - return(0);
|
| + return(0);
|
| } else if (elem == NULL) {
|
| return(0);
|
| } else {
|
| @@ -2740,23 +2738,24 @@ xmlRemoveID(xmlDocPtr doc, xmlAttrPtr attr) {
|
|
|
| if (doc == NULL) return(-1);
|
| if (attr == NULL) return(-1);
|
| +
|
| table = (xmlIDTablePtr) doc->ids;
|
| - if (table == NULL)
|
| + if (table == NULL)
|
| return(-1);
|
|
|
| - if (attr == NULL)
|
| - return(-1);
|
| ID = xmlNodeListGetString(doc, attr->children, 1);
|
| if (ID == NULL)
|
| - return(-1);
|
| + return(-1);
|
| +
|
| id = xmlHashLookup(table, ID);
|
| if (id == NULL || id->attr != attr) {
|
| - xmlFree(ID);
|
| - return(-1);
|
| + xmlFree(ID);
|
| + return(-1);
|
| }
|
| +
|
| xmlHashRemoveEntry(table, ID, (xmlHashDeallocator) xmlFreeID);
|
| xmlFree(ID);
|
| - attr->atype = 0;
|
| + attr->atype = 0;
|
| return(0);
|
| }
|
|
|
| @@ -2769,7 +2768,7 @@ xmlRemoveID(xmlDocPtr doc, xmlAttrPtr attr) {
|
| *
|
| * Returns NULL if not found, otherwise the xmlAttrPtr defining the ID
|
| */
|
| -xmlAttrPtr
|
| +xmlAttrPtr
|
| xmlGetID(xmlDocPtr doc, const xmlChar *ID) {
|
| xmlIDTablePtr table;
|
| xmlIDPtr id;
|
| @@ -2783,7 +2782,7 @@ xmlGetID(xmlDocPtr doc, const xmlChar *ID) {
|
| }
|
|
|
| table = (xmlIDTablePtr) doc->ids;
|
| - if (table == NULL)
|
| + if (table == NULL)
|
| return(NULL);
|
|
|
| id = xmlHashLookup(table, ID);
|
| @@ -2804,7 +2803,7 @@ xmlGetID(xmlDocPtr doc, const xmlChar *ID) {
|
| * Refs *
|
| * *
|
| ************************************************************************/
|
| -typedef struct xmlRemoveMemo_t
|
| +typedef struct xmlRemoveMemo_t
|
| {
|
| xmlListPtr l;
|
| xmlAttrPtr ap;
|
| @@ -2812,7 +2811,7 @@ typedef struct xmlRemoveMemo_t
|
|
|
| typedef xmlRemoveMemo *xmlRemoveMemoPtr;
|
|
|
| -typedef struct xmlValidateMemo_t
|
| +typedef struct xmlValidateMemo_t
|
| {
|
| xmlValidCtxtPtr ctxt;
|
| const xmlChar *name;
|
| @@ -2895,7 +2894,7 @@ xmlDummyCompare(const void *data0 ATTRIBUTE_UNUSED,
|
| *
|
| * Returns NULL if not, otherwise the new xmlRefPtr
|
| */
|
| -xmlRefPtr
|
| +xmlRefPtr
|
| xmlAddRef(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
|
| xmlAttrPtr attr) {
|
| xmlRefPtr ret;
|
| @@ -3023,7 +3022,7 @@ xmlIsRef(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
|
| return(0);
|
| } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
|
| /* TODO @@@ */
|
| - return(0);
|
| + return(0);
|
| } else {
|
| xmlAttributePtr attrDecl;
|
|
|
| @@ -3059,21 +3058,21 @@ xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr) {
|
|
|
| if (doc == NULL) return(-1);
|
| if (attr == NULL) return(-1);
|
| +
|
| table = (xmlRefTablePtr) doc->refs;
|
| - if (table == NULL)
|
| + if (table == NULL)
|
| return(-1);
|
|
|
| - if (attr == NULL)
|
| - return(-1);
|
| ID = xmlNodeListGetString(doc, attr->children, 1);
|
| if (ID == NULL)
|
| return(-1);
|
| - ref_list = xmlHashLookup(table, ID);
|
|
|
| + ref_list = xmlHashLookup(table, ID);
|
| if(ref_list == NULL) {
|
| xmlFree(ID);
|
| return (-1);
|
| }
|
| +
|
| /* At this point, ref_list refers to a list of references which
|
| * have the same key as the supplied attr. Our list of references
|
| * is ordered by reference address and we don't have that information
|
| @@ -3086,7 +3085,7 @@ xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr) {
|
| */
|
| target.l = ref_list;
|
| target.ap = attr;
|
| -
|
| +
|
| /* Remove the supplied attr from our list */
|
| xmlListWalk(ref_list, xmlWalkRemoveRef, &target);
|
|
|
| @@ -3103,11 +3102,11 @@ xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr) {
|
| * @doc: pointer to the document
|
| * @ID: the ID value
|
| *
|
| - * Find the set of references for the supplied ID.
|
| + * Find the set of references for the supplied ID.
|
| *
|
| * Returns NULL if not found, otherwise node set for the ID.
|
| */
|
| -xmlListPtr
|
| +xmlListPtr
|
| xmlGetRefs(xmlDocPtr doc, const xmlChar *ID) {
|
| xmlRefTablePtr table;
|
|
|
| @@ -3120,7 +3119,7 @@ xmlGetRefs(xmlDocPtr doc, const xmlChar *ID) {
|
| }
|
|
|
| table = (xmlRefTablePtr) doc->refs;
|
| - if (table == NULL)
|
| + if (table == NULL)
|
| return(NULL);
|
|
|
| return (xmlHashLookup(table, ID));
|
| @@ -3185,7 +3184,7 @@ xmlGetDtdElementDesc2(xmlDtdPtr dtd, const xmlChar *name, int create) {
|
| if (dtd->doc != NULL)
|
| dict = dtd->doc->dict;
|
|
|
| - if (!create)
|
| + if (!create)
|
| return(NULL);
|
| /*
|
| * Create the Element table if needed.
|
| @@ -3798,7 +3797,7 @@ xmlValidateAttributeValueInternal(xmlDocPtr doc, xmlAttributeType type,
|
| *
|
| * [ VC: Name Token ]
|
| * Values of type NMTOKEN must match the Nmtoken production; values
|
| - * of type NMTOKENS must match Nmtokens.
|
| + * of type NMTOKENS must match Nmtokens.
|
| *
|
| * returns 1 if valid or 0 otherwise
|
| */
|
| @@ -3857,7 +3856,7 @@ xmlValidateAttributeValue2(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| if ((ent == NULL) && (doc->standalone == 1)) {
|
| doc->standalone = 0;
|
| ent = xmlGetDocEntity(doc, value);
|
| - }
|
| + }
|
| if (ent == NULL) {
|
| xmlErrValidNode(ctxt, (xmlNodePtr) doc,
|
| XML_DTD_UNKNOWN_ENTITY,
|
| @@ -3968,7 +3967,7 @@ xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| if ((elem->ns != NULL) && (elem->ns->prefix != NULL)) {
|
| xmlChar fn[50];
|
| xmlChar *fullname;
|
| -
|
| +
|
| fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50);
|
| if (fullname == NULL)
|
| return(NULL);
|
| @@ -4167,7 +4166,7 @@ xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| }
|
| }
|
| if (nbId > 1) {
|
| -
|
| +
|
| xmlErrValidNodeNr(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,
|
| "Element %s has %d ID attribute defined in the internal subset : %s\n",
|
| attr->elem, nbId, attr->name);
|
| @@ -4230,7 +4229,7 @@ xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| xmlElementPtr tst;
|
|
|
| CHECK_DTD;
|
| -
|
| +
|
| if (elem == NULL) return(1);
|
|
|
| #if 0
|
| @@ -4347,7 +4346,7 @@ xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
|
|
| int
|
| xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| - xmlNodePtr elem, xmlAttrPtr attr, const xmlChar *value)
|
| + xmlNodePtr elem, xmlAttrPtr attr, const xmlChar *value)
|
| {
|
| xmlAttributePtr attrDecl = NULL;
|
| int val;
|
| @@ -4360,7 +4359,7 @@ xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| if ((elem->ns != NULL) && (elem->ns->prefix != NULL)) {
|
| xmlChar fn[50];
|
| xmlChar *fullname;
|
| -
|
| +
|
| fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50);
|
| if (fullname == NULL)
|
| return(0);
|
| @@ -4444,7 +4443,7 @@ xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| nota = xmlGetDtdNotationDesc(doc->intSubset, value);
|
| if (nota == NULL)
|
| nota = xmlGetDtdNotationDesc(doc->extSubset, value);
|
| -
|
| +
|
| if (nota == NULL) {
|
| xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
|
| "Value \"%s\" for attribute %s of %s is not a declared Notation\n",
|
| @@ -4537,7 +4536,7 @@ xmlNodePtr elem, const xmlChar *prefix, xmlNsPtr ns, const xmlChar *value) {
|
| if (prefix != NULL) {
|
| xmlChar fn[50];
|
| xmlChar *fullname;
|
| -
|
| +
|
| fullname = xmlBuildQName(elem->name, prefix, fn, 50);
|
| if (fullname == NULL) {
|
| xmlVErrMemory(ctxt, "Validating namespace");
|
| @@ -4641,7 +4640,7 @@ xmlNodePtr elem, const xmlChar *prefix, xmlNsPtr ns, const xmlChar *value) {
|
| nota = xmlGetDtdNotationDesc(doc->intSubset, value);
|
| if (nota == NULL)
|
| nota = xmlGetDtdNotationDesc(doc->extSubset, value);
|
| -
|
| +
|
| if (nota == NULL) {
|
| if (ns->prefix != NULL) {
|
| xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
|
| @@ -4777,7 +4776,7 @@ xmlValidateElementType(xmlValidCtxtPtr ctxt) {
|
| NODE = xmlValidateSkipIgnorable(NODE);
|
| if ((NODE == NULL) && (CONT == NULL))
|
| return(1);
|
| - if ((NODE == NULL) &&
|
| + if ((NODE == NULL) &&
|
| ((CONT->ocur == XML_ELEMENT_CONTENT_MULT) ||
|
| (CONT->ocur == XML_ELEMENT_CONTENT_OPT))) {
|
| return(1);
|
| @@ -5236,7 +5235,7 @@ xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child,
|
| xmlElementContentPtr cont;
|
| const xmlChar *name;
|
|
|
| - if (elemDecl == NULL)
|
| + if ((elemDecl == NULL) || (parent == NULL) || (ctxt == NULL))
|
| return(-1);
|
| cont = elemDecl->content;
|
| name = elemDecl->name;
|
| @@ -5286,7 +5285,7 @@ xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child,
|
| if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
|
| xmlChar fn[50];
|
| xmlChar *fullname;
|
| -
|
| +
|
| fullname = xmlBuildQName(cur->name,
|
| cur->ns->prefix, fn, 50);
|
| if (fullname == NULL) {
|
| @@ -5400,7 +5399,7 @@ fail:
|
| last = tmp;
|
| }
|
| if (cur->type == XML_CDATA_SECTION_NODE) {
|
| - /*
|
| + /*
|
| * E59 spaces in CDATA does not match the
|
| * nonterminal S
|
| */
|
| @@ -5517,7 +5516,8 @@ xmlValidateOneCdataElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| int ret = 1;
|
| xmlNodePtr cur, child;
|
|
|
| - if ((ctxt == NULL) || (doc == NULL) || (elem == NULL))
|
| + if ((ctxt == NULL) || (doc == NULL) || (elem == NULL) ||
|
| + (elem->type != XML_ELEMENT_NODE))
|
| return(0);
|
|
|
| child = elem->children;
|
| @@ -5598,7 +5598,7 @@ xmlValidateCheckMixed(xmlValidCtxtPtr ctxt,
|
| } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
|
| (cont->c1 == NULL) ||
|
| (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
|
| - xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT,
|
| + xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT,
|
| "Internal: MIXED struct corrupted\n",
|
| NULL);
|
| break;
|
| @@ -5622,7 +5622,7 @@ xmlValidateCheckMixed(xmlValidCtxtPtr ctxt,
|
| } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
|
| (cont->c1 == NULL) ||
|
| (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
|
| - xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
|
| + xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
|
| "Internal: MIXED struct corrupted\n",
|
| NULL);
|
| break;
|
| @@ -5651,7 +5651,7 @@ xmlValidGetElemDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| xmlElementPtr elemDecl = NULL;
|
| const xmlChar *prefix = NULL;
|
|
|
| - if ((ctxt == NULL) || (doc == NULL) ||
|
| + if ((ctxt == NULL) || (doc == NULL) ||
|
| (elem == NULL) || (elem->name == NULL))
|
| return(NULL);
|
| if (extsubset != NULL)
|
| @@ -5795,7 +5795,7 @@ xmlValidatePushElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| * xmlValidatePushCData:
|
| * @ctxt: the validation context
|
| * @data: some character data read
|
| - * @len: the lenght of the data
|
| + * @len: the length of the data
|
| *
|
| * check the CData parsed for validation in the current stack
|
| *
|
| @@ -6017,7 +6017,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| return(0);
|
|
|
| /*
|
| - * If vstateNr is not zero that means continuous validation is
|
| + * If vstateNr is not zero that means continuous validation is
|
| * activated, do not try to check the content model at that level.
|
| */
|
| if (ctxt->vstateNr == 0) {
|
| @@ -6060,7 +6060,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| if ((child->ns != NULL) && (child->ns->prefix != NULL)) {
|
| xmlChar fn[50];
|
| xmlChar *fullname;
|
| -
|
| +
|
| fullname = xmlBuildQName(child->name, child->ns->prefix,
|
| fn, 50);
|
| if (fullname == NULL)
|
| @@ -6078,7 +6078,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
|
| (cont->c1 == NULL) ||
|
| (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
|
| - xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT,
|
| + xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT,
|
| "Internal: MIXED struct corrupted\n",
|
| NULL);
|
| break;
|
| @@ -6101,7 +6101,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
|
| } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
|
| (cont->c1 == NULL) ||
|
| (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)) {
|
| - xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
|
| + xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
|
| "Internal: MIXED struct corrupted\n",
|
| NULL);
|
| break;
|
| @@ -6181,7 +6181,7 @@ child_ok:
|
| }
|
| } else {
|
| xmlAttrPtr attrib;
|
| -
|
| +
|
| attrib = elem->properties;
|
| while (attrib != NULL) {
|
| if (xmlStrEqual(attrib->name, attr->name)) {
|
| @@ -6196,18 +6196,18 @@ child_ok:
|
| * allow to define the URI instead of the prefix :-(
|
| */
|
| if (nameSpace == NULL) {
|
| - if (qualified < 0)
|
| + if (qualified < 0)
|
| qualified = 0;
|
| } else if (!xmlStrEqual(nameSpace->prefix,
|
| attr->prefix)) {
|
| - if (qualified < 1)
|
| + if (qualified < 1)
|
| qualified = 1;
|
| } else
|
| goto found;
|
| } else {
|
| /*
|
| * We should allow applications to define namespaces
|
| - * for their application even if the DTD doesn't
|
| + * for their application even if the DTD doesn't
|
| * carry one, otherwise, basically we would always
|
| * break.
|
| */
|
| @@ -6280,7 +6280,7 @@ child_ok:
|
| }
|
| }
|
| }
|
| -found:
|
| +found:
|
| attr = attr->nexth;
|
| }
|
| return(ret);
|
| @@ -6327,7 +6327,7 @@ xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
|
| if ((root->ns != NULL) && (root->ns->prefix != NULL)) {
|
| xmlChar fn[50];
|
| xmlChar *fullname;
|
| -
|
| +
|
| fullname = xmlBuildQName(root->name, root->ns->prefix, fn, 50);
|
| if (fullname == NULL) {
|
| xmlVErrMemory(ctxt, NULL);
|
| @@ -6338,7 +6338,7 @@ xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
|
| xmlFree(fullname);
|
| if (ret == 1)
|
| goto name_ok;
|
| - }
|
| + }
|
| if ((xmlStrEqual(doc->intSubset->name, BAD_CAST "HTML")) &&
|
| (xmlStrEqual(root->name, BAD_CAST "html")))
|
| goto name_ok;
|
| @@ -6359,7 +6359,7 @@ name_ok:
|
| * @doc: a document instance
|
| * @elem: an element instance
|
| *
|
| - * Try to validate the subtree under an element
|
| + * Try to validate the subtree under an element
|
| *
|
| * returns 1 if valid or 0 otherwise
|
| */
|
| @@ -6379,7 +6379,8 @@ xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem) {
|
| * they don't really mean anything validation wise.
|
| */
|
| if ((elem->type == XML_XINCLUDE_START) ||
|
| - (elem->type == XML_XINCLUDE_END))
|
| + (elem->type == XML_XINCLUDE_END) ||
|
| + (elem->type == XML_NAMESPACE_DECL))
|
| return(1);
|
|
|
| CHECK_DTD;
|
| @@ -6538,7 +6539,7 @@ xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt,
|
| memo.name = name;
|
|
|
| xmlListWalk(ref_list, xmlWalkValidateList, &memo);
|
| -
|
| +
|
| }
|
|
|
| /**
|
| @@ -6550,7 +6551,7 @@ xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt,
|
| * incremental validation steps have been completed
|
| *
|
| * basically it does the following checks described by the XML Rec
|
| - *
|
| + *
|
| * Check all the IDREF/IDREFS attributes definition for validity
|
| *
|
| * returns 1 if valid or 0 otherwise
|
| @@ -6559,15 +6560,20 @@ xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt,
|
| int
|
| xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
|
| xmlRefTablePtr table;
|
| + unsigned int save;
|
|
|
| if (ctxt == NULL)
|
| return(0);
|
| if (doc == NULL) {
|
| - xmlErrValid(ctxt, XML_DTD_NO_DOC,
|
| + xmlErrValid(ctxt, XML_DTD_NO_DOC,
|
| "xmlValidateDocumentFinal: doc == NULL\n", NULL);
|
| return(0);
|
| }
|
|
|
| + /* trick to get correct line id report */
|
| + save = ctxt->finishDtd;
|
| + ctxt->finishDtd = 0;
|
| +
|
| /*
|
| * Check all the NOTATION/NOTATIONS attributes
|
| */
|
| @@ -6581,6 +6587,8 @@ xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
|
| ctxt->doc = doc;
|
| ctxt->valid = 1;
|
| xmlHashScan(table, (xmlHashScanner) xmlValidateCheckRefCallback, ctxt);
|
| +
|
| + ctxt->finishDtd = save;
|
| return(ctxt->valid);
|
| }
|
|
|
| @@ -6675,7 +6683,7 @@ xmlValidateAttributeCallback(xmlAttributePtr cur, xmlValidCtxtPtr ctxt,
|
| case XML_ATTRIBUTE_ENTITIES:
|
| case XML_ATTRIBUTE_NOTATION:
|
| if (cur->defaultValue != NULL) {
|
| -
|
| +
|
| ret = xmlValidateAttributeValue2(ctxt, ctxt->doc, cur->name,
|
| cur->atype, cur->defaultValue);
|
| if ((ret == 0) && (ctxt->valid == 1))
|
| @@ -6732,9 +6740,9 @@ xmlValidateAttributeCallback(xmlAttributePtr cur, xmlValidCtxtPtr ctxt,
|
| * subsets have been parsed
|
| *
|
| * basically it does the following checks described by the XML Rec
|
| - * - check that ENTITY and ENTITIES type attributes default or
|
| + * - check that ENTITY and ENTITIES type attributes default or
|
| * possible values matches one of the defined entities.
|
| - * - check that NOTATION type attributes default or
|
| + * - check that NOTATION type attributes default or
|
| * possible values matches one of the defined notations.
|
| *
|
| * returns 1 if valid or 0 if invalid and -1 if not well-formed
|
| @@ -6805,7 +6813,7 @@ xmlValidateDocument(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
|
| xmlChar *sysID;
|
| if (doc->intSubset->SystemID != NULL) {
|
| sysID = xmlBuildURI(doc->intSubset->SystemID,
|
| - doc->URL);
|
| + doc->URL);
|
| if (sysID == NULL) {
|
| xmlErrValid(ctxt, XML_DTD_LOAD_ERROR,
|
| "Could not build URI for external subset \"%s\"\n",
|
| @@ -6878,17 +6886,17 @@ xmlValidGetPotentialChildren(xmlElementContent *ctree,
|
| if (*len >= max) return(*len);
|
|
|
| switch (ctree->type) {
|
| - case XML_ELEMENT_CONTENT_PCDATA:
|
| + case XML_ELEMENT_CONTENT_PCDATA:
|
| for (i = 0; i < *len;i++)
|
| if (xmlStrEqual(BAD_CAST "#PCDATA", names[i])) return(*len);
|
| names[(*len)++] = BAD_CAST "#PCDATA";
|
| break;
|
| - case XML_ELEMENT_CONTENT_ELEMENT:
|
| + case XML_ELEMENT_CONTENT_ELEMENT:
|
| for (i = 0; i < *len;i++)
|
| if (xmlStrEqual(ctree->name, names[i])) return(*len);
|
| names[(*len)++] = ctree->name;
|
| break;
|
| - case XML_ELEMENT_CONTENT_SEQ:
|
| + case XML_ELEMENT_CONTENT_SEQ:
|
| xmlValidGetPotentialChildren(ctree->c1, names, len, max);
|
| xmlValidGetPotentialChildren(ctree->c2, names, len, max);
|
| break;
|
| @@ -6897,7 +6905,7 @@ xmlValidGetPotentialChildren(xmlElementContent *ctree,
|
| xmlValidGetPotentialChildren(ctree->c2, names, len, max);
|
| break;
|
| }
|
| -
|
| +
|
| return(*len);
|
| }
|
|
|
| @@ -6939,19 +6947,19 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names,
|
| int max) {
|
| xmlValidCtxt vctxt;
|
| int nb_valid_elements = 0;
|
| - const xmlChar *elements[256];
|
| + const xmlChar *elements[256]={0};
|
| int nb_elements = 0, i;
|
| const xmlChar *name;
|
| -
|
| +
|
| xmlNode *ref_node;
|
| xmlNode *parent;
|
| xmlNode *test_node;
|
| -
|
| +
|
| xmlNode *prev_next;
|
| xmlNode *next_prev;
|
| xmlNode *parent_childs;
|
| xmlNode *parent_last;
|
| -
|
| +
|
| xmlElement *element_desc;
|
|
|
| if (prev == NULL && next == NULL)
|
| @@ -6976,7 +6984,7 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names,
|
| element_desc = xmlGetDtdElementDesc(parent->doc->extSubset,
|
| parent->name);
|
| if (element_desc == NULL) return(-1);
|
| -
|
| +
|
| /*
|
| * Do a backup of the current tree structure
|
| */
|
| @@ -6987,16 +6995,19 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names,
|
|
|
| /*
|
| * Creates a dummy node and insert it into the tree
|
| - */
|
| + */
|
| test_node = xmlNewDocNode (ref_node->doc, NULL, BAD_CAST "<!dummy?>", NULL);
|
| + if (test_node == NULL)
|
| + return(-1);
|
| +
|
| test_node->parent = parent;
|
| test_node->prev = prev;
|
| test_node->next = next;
|
| name = test_node->name;
|
| -
|
| +
|
| if (prev) prev->next = test_node;
|
| else parent->children = test_node;
|
| -
|
| +
|
| if (next) next->prev = test_node;
|
| else parent->last = test_node;
|
|
|
| @@ -7006,7 +7017,7 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names,
|
| */
|
| nb_elements = xmlValidGetPotentialChildren(element_desc->content,
|
| elements, &nb_elements, 256);
|
| -
|
| +
|
| for (i = 0;i < nb_elements;i++) {
|
| test_node->name = elements[i];
|
| if (xmlValidateOneElement(&vctxt, parent->doc, parent)) {
|
|
|