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:
2
parser.c
2
parser.c
@@ -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
144
valid.c
@@ -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;
|
||||||
|
Reference in New Issue
Block a user