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:
		
							
								
								
									
										11
									
								
								entities.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								entities.c
									
									
									
									
									
								
							| @@ -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. | ||||||
|   | |||||||
| @@ -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 */ | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -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 */ | ||||||
|   | |||||||
							
								
								
									
										54
									
								
								parser.c
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								parser.c
									
									
									
									
									
								
							| @@ -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); | ||||||
|   | |||||||
| @@ -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; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user