85 lines
2.8 KiB
Diff
85 lines
2.8 KiB
Diff
---
|
|
xmlreader.c | 36 +++++++++++++++++-------------------
|
|
1 file changed, 17 insertions(+), 19 deletions(-)
|
|
|
|
diff --git a/xmlreader.c b/xmlreader.c
|
|
index ac97bde..193a5d4 100644
|
|
--- a/xmlreader.c
|
|
+++ b/xmlreader.c
|
|
@@ -676,30 +676,23 @@ xmlTextReaderDebug(xmlTextReaderPtr reader) {
|
|
*
|
|
* Pushes a new entity reference node on top of the entities stack
|
|
*
|
|
- * Returns 0 in case of error, the index in the stack otherwise
|
|
+ * Returns -1 in case of error, the index in the stack otherwise
|
|
*/
|
|
static int
|
|
xmlTextReaderEntPush(xmlTextReaderPtr reader, xmlNodePtr value)
|
|
{
|
|
- if (reader->entMax <= 0) {
|
|
- reader->entMax = 10;
|
|
- reader->entTab = (xmlNodePtr *) xmlMalloc(reader->entMax *
|
|
- sizeof(reader->entTab[0]));
|
|
- if (reader->entTab == NULL) {
|
|
- xmlGenericError(xmlGenericErrorContext, "xmlMalloc failed !\n");
|
|
- return (0);
|
|
- }
|
|
- }
|
|
if (reader->entNr >= reader->entMax) {
|
|
- reader->entMax *= 2;
|
|
- reader->entTab =
|
|
- (xmlNodePtr *) xmlRealloc(reader->entTab,
|
|
- reader->entMax *
|
|
- sizeof(reader->entTab[0]));
|
|
- if (reader->entTab == NULL) {
|
|
+ size_t newSize = reader->entMax == 0 ? 10 : reader->entMax * 2;
|
|
+ xmlNodePtr *tmp;
|
|
+
|
|
+ tmp = (xmlNodePtr *) xmlRealloc(reader->entTab,
|
|
+ newSize * sizeof(*tmp));
|
|
+ if (tmp == NULL) {
|
|
xmlGenericError(xmlGenericErrorContext, "xmlRealloc failed !\n");
|
|
- return (0);
|
|
+ return (-1);
|
|
}
|
|
+ reader->entTab = tmp;
|
|
+ reader->entMax = newSize;
|
|
}
|
|
reader->entTab[reader->entNr] = value;
|
|
reader->ent = value;
|
|
@@ -1174,7 +1167,11 @@ xmlTextReaderValidateEntity(xmlTextReaderPtr reader) {
|
|
if ((node->children != NULL) &&
|
|
(node->children->type == XML_ENTITY_DECL) &&
|
|
(node->children->children != NULL)) {
|
|
- xmlTextReaderEntPush(reader, node);
|
|
+ if (xmlTextReaderEntPush(reader, node) < 0) {
|
|
+ if (node == oldnode)
|
|
+ break;
|
|
+ goto skip_children;
|
|
+ }
|
|
node = node->children->children;
|
|
continue;
|
|
} else {
|
|
@@ -1621,7 +1618,8 @@ node_found:
|
|
if ((reader->node->children != NULL) &&
|
|
(reader->node->children->type == XML_ENTITY_DECL) &&
|
|
(reader->node->children->children != NULL)) {
|
|
- xmlTextReaderEntPush(reader, reader->node);
|
|
+ if (xmlTextReaderEntPush(reader, reader->node) < 0)
|
|
+ goto get_next_node;
|
|
reader->node = reader->node->children->children;
|
|
}
|
|
#ifdef LIBXML_REGEXP_ENABLED
|
|
--
|
|
2.27.0
|
|
|
|
ush(reader, reader->node);
|
|
+ if (xmlTextReaderEntPush(reader, reader->node) < 0)
|
|
+ goto get_next_node;
|
|
reader->node = reader->node->children->children;
|
|
}
|
|
#ifdef LIBXML_REGEXP_ENABLED
|
|
--
|
|
2.27.0
|
|
|