1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-10-28 23:14:57 +03:00

entities: Stop counting entities

This was only used in the old version of xmlParserEntityCheck.
This commit is contained in:
Nick Wellnhofer
2022-12-19 20:56:23 +01:00
parent a3c8b1805e
commit ce76ebfd13
5 changed files with 6 additions and 66 deletions

View File

@@ -38,35 +38,35 @@ static xmlEntity xmlEntityLt = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BAD_CAST "<", BAD_CAST "<", 1, BAD_CAST "<", BAD_CAST "<", 1,
XML_INTERNAL_PREDEFINED_ENTITY, XML_INTERNAL_PREDEFINED_ENTITY,
NULL, NULL, NULL, NULL, 0, 1, 0, 0 NULL, NULL, NULL, NULL, 0, 0, 0
}; };
static xmlEntity xmlEntityGt = { static xmlEntity xmlEntityGt = {
NULL, XML_ENTITY_DECL, BAD_CAST "gt", NULL, XML_ENTITY_DECL, BAD_CAST "gt",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BAD_CAST ">", BAD_CAST ">", 1, BAD_CAST ">", BAD_CAST ">", 1,
XML_INTERNAL_PREDEFINED_ENTITY, XML_INTERNAL_PREDEFINED_ENTITY,
NULL, NULL, NULL, NULL, 0, 1, 0, 0 NULL, NULL, NULL, NULL, 0, 0, 0
}; };
static xmlEntity xmlEntityAmp = { static xmlEntity xmlEntityAmp = {
NULL, XML_ENTITY_DECL, BAD_CAST "amp", NULL, XML_ENTITY_DECL, BAD_CAST "amp",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BAD_CAST "&", BAD_CAST "&", 1, BAD_CAST "&", BAD_CAST "&", 1,
XML_INTERNAL_PREDEFINED_ENTITY, XML_INTERNAL_PREDEFINED_ENTITY,
NULL, NULL, NULL, NULL, 0, 1, 0, 0 NULL, NULL, NULL, NULL, 0, 0, 0
}; };
static xmlEntity xmlEntityQuot = { static xmlEntity xmlEntityQuot = {
NULL, XML_ENTITY_DECL, BAD_CAST "quot", NULL, XML_ENTITY_DECL, BAD_CAST "quot",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BAD_CAST "\"", BAD_CAST "\"", 1, BAD_CAST "\"", BAD_CAST "\"", 1,
XML_INTERNAL_PREDEFINED_ENTITY, XML_INTERNAL_PREDEFINED_ENTITY,
NULL, NULL, NULL, NULL, 0, 1, 0, 0 NULL, NULL, NULL, NULL, 0, 0, 0
}; };
static xmlEntity xmlEntityApos = { static xmlEntity xmlEntityApos = {
NULL, XML_ENTITY_DECL, BAD_CAST "apos", NULL, XML_ENTITY_DECL, BAD_CAST "apos",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BAD_CAST "'", BAD_CAST "'", 1, BAD_CAST "'", BAD_CAST "'", 1,
XML_INTERNAL_PREDEFINED_ENTITY, XML_INTERNAL_PREDEFINED_ENTITY,
NULL, NULL, NULL, NULL, 0, 1, 0, 0 NULL, NULL, NULL, NULL, 0, 0, 0
}; };
/** /**
@@ -163,7 +163,6 @@ xmlCreateEntity(xmlDictPtr dict, const xmlChar *name, int type,
} }
memset(ret, 0, sizeof(xmlEntity)); memset(ret, 0, sizeof(xmlEntity));
ret->type = XML_ENTITY_DECL; ret->type = XML_ENTITY_DECL;
ret->checked = 0;
/* /*
* fill the structure. * fill the structure.

View File

@@ -56,10 +56,6 @@ struct _xmlEntity {
struct _xmlEntity *nexte; /* unused */ struct _xmlEntity *nexte; /* unused */
const xmlChar *URI; /* the full URI as computed */ const xmlChar *URI; /* the full URI as computed */
int owner; /* does the entity own the childrens */ int owner; /* does the entity own the childrens */
int checked; /* was the entity content checked */
/* this is also used to count entities
* references done from that entity
* and if it contains '<' */
int flags; /* various flags */ int flags; /* various flags */
unsigned long expandedSize; /* expanded size */ unsigned long expandedSize; /* expanded size */
}; };

View File

@@ -297,7 +297,7 @@ struct _xmlParserCtxt {
*/ */
xmlError lastError; xmlError lastError;
xmlParserMode parseMode; /* the parser mode */ xmlParserMode parseMode; /* the parser mode */
unsigned long nbentities; /* number of entities references */ unsigned long nbentities; /* unused */
unsigned long sizeentities; /* size of parsed entities */ unsigned long sizeentities; /* size of parsed entities */
/* for use by HTML non-recursive parser */ /* for use by HTML non-recursive parser */

View File

@@ -2659,8 +2659,6 @@ xmlStringDecodeEntitiesInt(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
"String decoding Entity Reference: %.30s\n", "String decoding Entity Reference: %.30s\n",
str); str);
ent = xmlParseStringEntityRef(ctxt, &str); ent = xmlParseStringEntityRef(ctxt, &str);
if (ent != NULL)
ctxt->nbentities += ent->checked;
if ((ent != NULL) && if ((ent != NULL) &&
(ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
if (ent->content != NULL) { if (ent->content != NULL) {
@@ -2712,8 +2710,6 @@ xmlStringDecodeEntitiesInt(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
xmlGenericError(xmlGenericErrorContext, xmlGenericError(xmlGenericErrorContext,
"String decoding PE Reference: %.30s\n", str); "String decoding PE Reference: %.30s\n", str);
ent = xmlParseStringPEReference(ctxt, &str); ent = xmlParseStringPEReference(ctxt, &str);
if (ent != NULL)
ctxt->nbentities += ent->checked;
if (ent != NULL) { if (ent != NULL) {
if (ent->content == NULL) { if (ent->content == NULL) {
/* /*
@@ -3986,9 +3982,6 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
} }
} else { } else {
ent = xmlParseEntityRef(ctxt); ent = xmlParseEntityRef(ctxt);
ctxt->nbentities++;
if (ent != NULL)
ctxt->nbentities += ent->owner;
if ((ent != NULL) && if ((ent != NULL) &&
(ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
if (len + 10 > buf_size) { if (len + 10 > buf_size) {
@@ -4050,7 +4043,6 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
if ((ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) && if ((ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) &&
(ent->content != NULL)) { (ent->content != NULL)) {
if ((ent->flags & XML_ENT_CHECKED) == 0) { if ((ent->flags & XML_ENT_CHECKED) == 0) {
unsigned long oldnbent = ctxt->nbentities;
unsigned long oldCopy = ctxt->sizeentcopy; unsigned long oldCopy = ctxt->sizeentcopy;
ctxt->sizeentcopy = ent->length; ctxt->sizeentcopy = ent->length;
@@ -4062,7 +4054,6 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
/* check */ 1); /* check */ 1);
--ctxt->depth; --ctxt->depth;
ent->checked = ctxt->nbentities - oldnbent + 1;
ent->flags |= XML_ENT_CHECKED; ent->flags |= XML_ENT_CHECKED;
ent->expandedSize = ctxt->sizeentcopy; ent->expandedSize = ctxt->sizeentcopy;
@@ -7226,7 +7217,6 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
if (((ent->flags & XML_ENT_PARSED) == 0) && if (((ent->flags & XML_ENT_PARSED) == 0) &&
((ent->etype != XML_EXTERNAL_GENERAL_PARSED_ENTITY) || ((ent->etype != XML_EXTERNAL_GENERAL_PARSED_ENTITY) ||
(ctxt->options & (XML_PARSE_NOENT | XML_PARSE_DTDVALID)))) { (ctxt->options & (XML_PARSE_NOENT | XML_PARSE_DTDVALID)))) {
unsigned long oldnbent = ctxt->nbentities;
unsigned long oldsizeentcopy = ctxt->sizeentcopy; unsigned long oldsizeentcopy = ctxt->sizeentcopy;
/* /*
@@ -7269,11 +7259,6 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
ent->flags |= XML_ENT_PARSED | XML_ENT_CHECKED; ent->flags |= XML_ENT_PARSED | XML_ENT_CHECKED;
ent->expandedSize = ctxt->sizeentcopy; ent->expandedSize = ctxt->sizeentcopy;
/*
* Store the number of entities needing parsing for this entity
* content and do checkings
*/
ent->checked = ctxt->nbentities - oldnbent + 1;
if (ret == XML_ERR_ENTITY_LOOP) { if (ret == XML_ERR_ENTITY_LOOP) {
xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL); xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
xmlHaltParser(ctxt); xmlHaltParser(ctxt);
@@ -7336,13 +7321,9 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
xmlFreeNodeList(list); xmlFreeNodeList(list);
list = NULL; list = NULL;
} }
if (ent->checked == 0)
ent->checked = 1;
/* Prevent entity from being parsed and expanded twice (Bug 760367). */ /* Prevent entity from being parsed and expanded twice (Bug 760367). */
was_checked = 0; was_checked = 0;
} else {
ctxt->nbentities += ent->checked;
} }
/* /*
@@ -7620,11 +7601,6 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
return(ent); return(ent);
} }
/*
* Increase the number of entity references parsed
*/
ctxt->nbentities++;
/* /*
* Ask first SAX for entity resolution, otherwise try the * Ask first SAX for entity resolution, otherwise try the
* entities which may have stored in the parser context. * entities which may have stored in the parser context.
@@ -7819,11 +7795,6 @@ xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
} }
} }
/*
* Increase the number of entity references parsed
*/
ctxt->nbentities++;
/* /*
* Ask first SAX for entity resolution, otherwise try the * Ask first SAX for entity resolution, otherwise try the
* entities which may have stored in the parser context. * entities which may have stored in the parser context.
@@ -8001,11 +7972,6 @@ xmlParsePEReference(xmlParserCtxtPtr ctxt)
NEXT; NEXT;
/*
* Increase the number of entity references parsed
*/
ctxt->nbentities++;
/* /*
* Request the entity from SAX * Request the entity from SAX
*/ */
@@ -8278,11 +8244,6 @@ xmlParseStringPEReference(xmlParserCtxtPtr ctxt, const xmlChar **str) {
} }
ptr++; ptr++;
/*
* Increase the number of entity references parsed
*/
ctxt->nbentities++;
/* /*
* Request the entity from SAX * Request the entity from SAX
*/ */
@@ -12974,13 +12935,6 @@ xmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt,
ret = XML_ERR_OK; ret = XML_ERR_OK;
} }
/*
* Record in the parent context the number of entities replacement
* done when parsing that reference.
*/
if (oldctxt != NULL)
oldctxt->nbentities += ctxt->nbentities;
/* /*
* Also record the size of the entity parsed * Also record the size of the entity parsed
*/ */
@@ -13248,13 +13202,6 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
ctxt->myDoc->last = last; ctxt->myDoc->last = last;
} }
/*
* Record in the parent context the number of entities replacement
* done when parsing that reference.
*/
if (oldctxt != NULL)
oldctxt->nbentities += ctxt->nbentities;
/* /*
* Also record the size of the entity parsed * Also record the size of the entity parsed
*/ */
@@ -14701,7 +14648,6 @@ xmlCtxtReset(xmlParserCtxtPtr ctxt)
ctxt->depth = 0; ctxt->depth = 0;
ctxt->charset = XML_CHAR_ENCODING_UTF8; ctxt->charset = XML_CHAR_ENCODING_UTF8;
ctxt->catalogs = NULL; ctxt->catalogs = NULL;
ctxt->nbentities = 0;
ctxt->sizeentities = 0; ctxt->sizeentities = 0;
ctxt->sizeentcopy = 0; ctxt->sizeentcopy = 0;
xmlInitNodeInfoSeq(&ctxt->node_seq); xmlInitNodeInfoSeq(&ctxt->node_seq);

View File

@@ -1640,7 +1640,6 @@ xmlInitSAXParserCtxt(xmlParserCtxtPtr ctxt, const xmlSAXHandler *sax,
ctxt->depth = 0; ctxt->depth = 0;
ctxt->charset = XML_CHAR_ENCODING_UTF8; ctxt->charset = XML_CHAR_ENCODING_UTF8;
ctxt->catalogs = NULL; ctxt->catalogs = NULL;
ctxt->nbentities = 0;
ctxt->sizeentities = 0; ctxt->sizeentities = 0;
ctxt->sizeentcopy = 0; ctxt->sizeentcopy = 0;
ctxt->input_id = 1; ctxt->input_id = 1;