1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-10-21 14:53:44 +03:00

valid: Don't check enum values

Rely on the parser to pass valid arguments.
This commit is contained in:
Nick Wellnhofer
2025-05-20 16:50:32 +02:00
parent 4aa7192f21
commit 2a60ca06c0
2 changed files with 20 additions and 126 deletions

View File

@@ -6582,6 +6582,8 @@ xmlParseElementDecl(xmlParserCtxt *ctxt) {
ret = XML_ELEMENT_TYPE_ANY; ret = XML_ELEMENT_TYPE_ANY;
} else if (RAW == '(') { } else if (RAW == '(') {
ret = xmlParseElementContentDecl(ctxt, name, &content); ret = xmlParseElementContentDecl(ctxt, name, &content);
if (ret <= 0)
return(-1);
} else { } else {
/* /*
* [ WFC: PEs in Internal Subset ] error handling. * [ WFC: PEs in Internal Subset ] error handling.

144
valid.c
View File

@@ -102,22 +102,6 @@ xmlDoErrValid(xmlValidCtxtPtr ctxt, xmlNodePtr node,
va_end(ap); va_end(ap);
} }
/**
* Handle a validation error
*
* @param ctxt an XML validation parser context
* @param error the error number
* @param msg the error message
* @param extra extra information
*/
static void LIBXML_ATTR_FORMAT(3,0)
xmlErrValid(xmlValidCtxtPtr ctxt, xmlParserErrors error,
const char *msg, const char *extra)
{
xmlDoErrValid(ctxt, NULL, error, XML_ERR_ERROR, (const xmlChar *) extra,
NULL, NULL, 0, msg, extra);
}
/** /**
* Handle a validation error, provide contextual information * Handle a validation error, provide contextual information
* *
@@ -140,6 +124,22 @@ xmlErrValidNode(xmlValidCtxtPtr ctxt,
} }
#ifdef LIBXML_VALID_ENABLED #ifdef LIBXML_VALID_ENABLED
/**
* Handle a validation error
*
* @param ctxt an XML validation parser context
* @param error the error number
* @param msg the error message
* @param extra extra information
*/
static void LIBXML_ATTR_FORMAT(3,0)
xmlErrValid(xmlValidCtxtPtr ctxt, xmlParserErrors error,
const char *msg, const char *extra)
{
xmlDoErrValid(ctxt, NULL, error, XML_ERR_ERROR, (const xmlChar *) extra,
NULL, NULL, 0, msg, extra);
}
/** /**
* Handle a validation error, provide contextual information * Handle a validation error, provide contextual information
* *
@@ -701,29 +701,6 @@ xmlNewDocElementContent(xmlDoc *doc, const xmlChar *name,
if (doc != NULL) if (doc != NULL)
dict = doc->dict; dict = doc->dict;
switch(type) {
case XML_ELEMENT_CONTENT_ELEMENT:
if (name == NULL) {
xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
"xmlNewElementContent : name == NULL !\n",
NULL);
}
break;
case XML_ELEMENT_CONTENT_PCDATA:
case XML_ELEMENT_CONTENT_SEQ:
case XML_ELEMENT_CONTENT_OR:
if (name != NULL) {
xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
"xmlNewElementContent : name != NULL !\n",
NULL);
}
break;
default:
xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
"Internal: ELEMENT content corrupted invalid type\n",
NULL);
return(NULL);
}
ret = (xmlElementContentPtr) xmlMalloc(sizeof(xmlElementContent)); ret = (xmlElementContentPtr) xmlMalloc(sizeof(xmlElementContent));
if (ret == NULL) if (ret == NULL)
return(NULL); return(NULL);
@@ -911,18 +888,6 @@ xmlFreeDocElementContent(xmlDoc *doc, xmlElementContent *cur) {
depth += 1; depth += 1;
} }
switch (cur->type) {
case XML_ELEMENT_CONTENT_PCDATA:
case XML_ELEMENT_CONTENT_ELEMENT:
case XML_ELEMENT_CONTENT_SEQ:
case XML_ELEMENT_CONTENT_OR:
break;
default:
xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
"Internal: ELEMENT content corrupted invalid type\n",
NULL);
return;
}
if (dict) { if (dict) {
if ((cur->name != NULL) && (!xmlDictOwns(dict, cur->name))) if ((cur->name != NULL) && (!xmlDictOwns(dict, cur->name)))
xmlFree((xmlChar *) cur->name); xmlFree((xmlChar *) cur->name);
@@ -1143,49 +1108,6 @@ xmlAddElementDecl(xmlValidCtxt *ctxt,
return(NULL); return(NULL);
} }
#ifdef LIBXML_VALID_ENABLED
if ((ctxt != NULL) && (ctxt->flags & XML_VCTXT_VALIDATE)) {
switch (type) {
case XML_ELEMENT_TYPE_EMPTY:
if (content != NULL) {
xmlErrValid(ctxt, XML_DTD_CONTENT_ERROR,
"xmlAddElementDecl: content != NULL for EMPTY\n",
NULL);
return(NULL);
}
break;
case XML_ELEMENT_TYPE_ANY:
if (content != NULL) {
xmlErrValid(ctxt, XML_DTD_CONTENT_ERROR,
"xmlAddElementDecl: content != NULL for ANY\n",
NULL);
return(NULL);
}
break;
case XML_ELEMENT_TYPE_MIXED:
if (content == NULL) {
xmlErrValid(ctxt, XML_DTD_CONTENT_ERROR,
"xmlAddElementDecl: content == NULL for MIXED\n",
NULL);
return(NULL);
}
break;
case XML_ELEMENT_TYPE_ELEMENT:
if (content == NULL) {
xmlErrValid(ctxt, XML_DTD_CONTENT_ERROR,
"xmlAddElementDecl: content == NULL for ELEMENT\n",
NULL);
return(NULL);
}
break;
default:
xmlErrValid(ctxt, XML_ERR_ARGUMENT,
"xmlAddElementDecl: invalid type\n", NULL);
return(NULL);
}
}
#endif /* LIBXML_VALID_ENABLED */
/* /*
* check if name is a QName * check if name is a QName
*/ */
@@ -1655,36 +1577,6 @@ xmlAddAttributeDecl(xmlValidCtxt *ctxt,
dict = dtd->doc->dict; dict = dtd->doc->dict;
#ifdef LIBXML_VALID_ENABLED #ifdef LIBXML_VALID_ENABLED
/*
* Check the type and possibly the default value.
*/
switch (type) {
case XML_ATTRIBUTE_CDATA:
break;
case XML_ATTRIBUTE_ID:
break;
case XML_ATTRIBUTE_IDREF:
break;
case XML_ATTRIBUTE_IDREFS:
break;
case XML_ATTRIBUTE_ENTITY:
break;
case XML_ATTRIBUTE_ENTITIES:
break;
case XML_ATTRIBUTE_NMTOKEN:
break;
case XML_ATTRIBUTE_NMTOKENS:
break;
case XML_ATTRIBUTE_ENUMERATION:
break;
case XML_ATTRIBUTE_NOTATION:
break;
default:
xmlErrValid(ctxt, XML_ERR_ARGUMENT,
"xmlAddAttributeDecl: invalid type\n", NULL);
xmlFreeEnumeration(tree);
return(NULL);
}
if ((ctxt != NULL) && (ctxt->flags & XML_VCTXT_VALIDATE) && if ((ctxt != NULL) && (ctxt->flags & XML_VCTXT_VALIDATE) &&
(defaultValue != NULL) && (defaultValue != NULL) &&
(!xmlValidateAttributeValueInternal(dtd->doc, type, defaultValue))) { (!xmlValidateAttributeValueInternal(dtd->doc, type, defaultValue))) {
@@ -5213,7 +5105,7 @@ xmlValidateCheckMixed(xmlValidCtxtPtr ctxt,
} else if ((cont->type != XML_ELEMENT_CONTENT_OR) || } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
(cont->c1 == NULL) || (cont->c1 == NULL) ||
(cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){ (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT, xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
"Internal: MIXED struct corrupted\n", "Internal: MIXED struct corrupted\n",
NULL); NULL);
break; break;
@@ -5660,7 +5552,7 @@ xmlValidateOneElement(xmlValidCtxt *ctxt, xmlDoc *doc,
} else if ((cont->type != XML_ELEMENT_CONTENT_OR) || } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
(cont->c1 == NULL) || (cont->c1 == NULL) ||
(cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){ (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT, xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
"Internal: MIXED struct corrupted\n", "Internal: MIXED struct corrupted\n",
NULL); NULL);
break; break;