153aa9179Sopenharmony_ci---
253aa9179Sopenharmony_ci xmlreader.c | 36 +++++++++++++++++-------------------
353aa9179Sopenharmony_ci 1 file changed, 17 insertions(+), 19 deletions(-)
453aa9179Sopenharmony_ci
553aa9179Sopenharmony_cidiff --git a/xmlreader.c b/xmlreader.c
653aa9179Sopenharmony_ciindex ac97bde..193a5d4 100644
753aa9179Sopenharmony_ci--- a/xmlreader.c
853aa9179Sopenharmony_ci+++ b/xmlreader.c
953aa9179Sopenharmony_ci@@ -676,30 +676,23 @@ xmlTextReaderDebug(xmlTextReaderPtr reader) {
1053aa9179Sopenharmony_ci  *
1153aa9179Sopenharmony_ci  * Pushes a new entity reference node on top of the entities stack
1253aa9179Sopenharmony_ci  *
1353aa9179Sopenharmony_ci- * Returns 0 in case of error, the index in the stack otherwise
1453aa9179Sopenharmony_ci+ * Returns -1 in case of error, the index in the stack otherwise
1553aa9179Sopenharmony_ci  */
1653aa9179Sopenharmony_ci static int
1753aa9179Sopenharmony_ci xmlTextReaderEntPush(xmlTextReaderPtr reader, xmlNodePtr value)
1853aa9179Sopenharmony_ci {
1953aa9179Sopenharmony_ci-    if (reader->entMax <= 0) {
2053aa9179Sopenharmony_ci-	reader->entMax = 10;
2153aa9179Sopenharmony_ci-	reader->entTab = (xmlNodePtr *) xmlMalloc(reader->entMax *
2253aa9179Sopenharmony_ci-		                                  sizeof(reader->entTab[0]));
2353aa9179Sopenharmony_ci-        if (reader->entTab == NULL) {
2453aa9179Sopenharmony_ci-            xmlGenericError(xmlGenericErrorContext, "xmlMalloc failed !\n");
2553aa9179Sopenharmony_ci-            return (0);
2653aa9179Sopenharmony_ci-        }
2753aa9179Sopenharmony_ci-    }
2853aa9179Sopenharmony_ci     if (reader->entNr >= reader->entMax) {
2953aa9179Sopenharmony_ci-        reader->entMax *= 2;
3053aa9179Sopenharmony_ci-        reader->entTab =
3153aa9179Sopenharmony_ci-            (xmlNodePtr *) xmlRealloc(reader->entTab,
3253aa9179Sopenharmony_ci-                                      reader->entMax *
3353aa9179Sopenharmony_ci-                                      sizeof(reader->entTab[0]));
3453aa9179Sopenharmony_ci-        if (reader->entTab == NULL) {
3553aa9179Sopenharmony_ci+        size_t newSize = reader->entMax == 0 ? 10 : reader->entMax * 2;
3653aa9179Sopenharmony_ci+        xmlNodePtr *tmp;
3753aa9179Sopenharmony_ci+
3853aa9179Sopenharmony_ci+        tmp = (xmlNodePtr *) xmlRealloc(reader->entTab,
3953aa9179Sopenharmony_ci+                                        newSize * sizeof(*tmp));
4053aa9179Sopenharmony_ci+        if (tmp == NULL) {
4153aa9179Sopenharmony_ci             xmlGenericError(xmlGenericErrorContext, "xmlRealloc failed !\n");
4253aa9179Sopenharmony_ci-            return (0);
4353aa9179Sopenharmony_ci+            return (-1);
4453aa9179Sopenharmony_ci         }
4553aa9179Sopenharmony_ci+        reader->entTab = tmp;
4653aa9179Sopenharmony_ci+        reader->entMax = newSize;
4753aa9179Sopenharmony_ci     }
4853aa9179Sopenharmony_ci     reader->entTab[reader->entNr] = value;
4953aa9179Sopenharmony_ci     reader->ent = value;
5053aa9179Sopenharmony_ci@@ -1174,7 +1167,11 @@ xmlTextReaderValidateEntity(xmlTextReaderPtr reader) {
5153aa9179Sopenharmony_ci 	    if ((node->children != NULL) &&
5253aa9179Sopenharmony_ci 		(node->children->type == XML_ENTITY_DECL) &&
5353aa9179Sopenharmony_ci 		(node->children->children != NULL)) {
5453aa9179Sopenharmony_ci-		xmlTextReaderEntPush(reader, node);
5553aa9179Sopenharmony_ci+		if (xmlTextReaderEntPush(reader, node) < 0) {
5653aa9179Sopenharmony_ci+                    if (node == oldnode)
5753aa9179Sopenharmony_ci+                        break;
5853aa9179Sopenharmony_ci+                    goto skip_children;
5953aa9179Sopenharmony_ci+                }
6053aa9179Sopenharmony_ci 		node = node->children->children;
6153aa9179Sopenharmony_ci 		continue;
6253aa9179Sopenharmony_ci 	    } else {
6353aa9179Sopenharmony_ci@@ -1621,7 +1618,8 @@ node_found:
6453aa9179Sopenharmony_ci 	if ((reader->node->children != NULL) &&
6553aa9179Sopenharmony_ci 	    (reader->node->children->type == XML_ENTITY_DECL) &&
6653aa9179Sopenharmony_ci 	    (reader->node->children->children != NULL)) {
6753aa9179Sopenharmony_ci-	    xmlTextReaderEntPush(reader, reader->node);
6853aa9179Sopenharmony_ci+	    if (xmlTextReaderEntPush(reader, reader->node) < 0)
6953aa9179Sopenharmony_ci+                goto get_next_node;
7053aa9179Sopenharmony_ci 	    reader->node = reader->node->children->children;
7153aa9179Sopenharmony_ci 	}
7253aa9179Sopenharmony_ci #ifdef LIBXML_REGEXP_ENABLED
7353aa9179Sopenharmony_ci-- 
7453aa9179Sopenharmony_ci2.27.0
7553aa9179Sopenharmony_ci
7653aa9179Sopenharmony_ciush(reader, reader->node);
7753aa9179Sopenharmony_ci+	    if (xmlTextReaderEntPush(reader, reader->node) < 0)
7853aa9179Sopenharmony_ci+                goto get_next_node;
7953aa9179Sopenharmony_ci 	    reader->node = reader->node->children->children;
8053aa9179Sopenharmony_ci 	}
8153aa9179Sopenharmony_ci #ifdef LIBXML_REGEXP_ENABLED
8253aa9179Sopenharmony_ci-- 
8353aa9179Sopenharmony_ci2.27.0
8453aa9179Sopenharmony_ci
85