lslebodn / rpms / libxml2

Forked from rpms/libxml2 4 years ago
Clone
4e98652
From e4f7cd441de5804a989bff3ab4993f2f62751a89 Mon Sep 17 00:00:00 2001
4e98652
From: Chris Evans <scarybeasts@gmail.com>
4e98652
Date: Wed, 23 Mar 2011 08:13:06 +0800
4e98652
Subject: [PATCH] Fix some potential problems on reallocation failures
4e98652
To: libvir-list@redhat.com
4e98652
4e98652
The count was incremented before the allocation
4e98652
and not fixed in case of failure
4e98652
* xpath.c: corrects a few instances where the available count of some
4e98652
           structure is updated before we know the allocation actually
4e98652
           succeeds
4e98652
4e98652
Signed-off-by: Daniel Veillard <veillard@redhat.com>
4e98652
---
4e98652
 xpath.c | 20 ++++++++++----------
4e98652
 1 file changed, 10 insertions(+), 10 deletions(-)
4e98652
4e98652
diff --git a/xpath.c b/xpath.c
4e98652
index eef69f7..756220b 100644
4e98652
--- a/xpath.c
4e98652
+++ b/xpath.c
4e98652
@@ -3522,13 +3522,13 @@ xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) {
4e98652
     } else if (cur->nodeNr == cur->nodeMax) {
4e98652
         xmlNodePtr *temp;
4e98652
 
4e98652
-        cur->nodeMax *= 2;
4e98652
-	temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax *
4e98652
+	temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 *
4e98652
 				      sizeof(xmlNodePtr));
4e98652
 	if (temp == NULL) {
4e98652
 	    xmlXPathErrMemory(NULL, "growing nodeset\n");
4e98652
 	    return;
4e98652
 	}
4e98652
+        cur->nodeMax *= 2;
4e98652
 	cur->nodeTab = temp;
4e98652
     }
4e98652
     cur->nodeTab[cur->nodeNr++] = xmlXPathNodeSetDupNs(node, ns);
4e98652
@@ -3627,14 +3627,14 @@ xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) {
4e98652
     } else if (cur->nodeNr == cur->nodeMax) {
4e98652
         xmlNodePtr *temp;
4e98652
 
4e98652
-        cur->nodeMax *= 2;
4e98652
-	temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax *
4e98652
+	temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 *
4e98652
 				      sizeof(xmlNodePtr));
4e98652
 	if (temp == NULL) {
4e98652
 	    xmlXPathErrMemory(NULL, "growing nodeset\n");
4e98652
 	    return;
4e98652
 	}
4e98652
 	cur->nodeTab = temp;
4e98652
+        cur->nodeMax *= 2;
4e98652
     }
4e98652
     if (val->type == XML_NAMESPACE_DECL) {
4e98652
 	xmlNsPtr ns = (xmlNsPtr) val;
4e98652
@@ -3738,14 +3738,14 @@ xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2) {
4e98652
 	} else if (val1->nodeNr == val1->nodeMax) {
4e98652
 	    xmlNodePtr *temp;
4e98652
 
4e98652
-	    val1->nodeMax *= 2;
4e98652
-	    temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax *
4e98652
+	    temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax * 2 *
4e98652
 					     sizeof(xmlNodePtr));
4e98652
 	    if (temp == NULL) {
4e98652
 	        xmlXPathErrMemory(NULL, "merging nodeset\n");
4e98652
 		return(NULL);
4e98652
 	    }
4e98652
 	    val1->nodeTab = temp;
4e98652
+	    val1->nodeMax *= 2;
4e98652
 	}
4e98652
 	if (n2->type == XML_NAMESPACE_DECL) {
4e98652
 	    xmlNsPtr ns = (xmlNsPtr) n2;
4e98652
@@ -3907,14 +3907,14 @@ xmlXPathNodeSetMergeAndClear(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
4e98652
 	    } else if (set1->nodeNr >= set1->nodeMax) {
4e98652
 		xmlNodePtr *temp;
4e98652
 
4e98652
-		set1->nodeMax *= 2;
4e98652
 		temp = (xmlNodePtr *) xmlRealloc(
4e98652
-		    set1->nodeTab, set1->nodeMax * sizeof(xmlNodePtr));
4e98652
+		    set1->nodeTab, set1->nodeMax * 2 * sizeof(xmlNodePtr));
4e98652
 		if (temp == NULL) {
4e98652
 		    xmlXPathErrMemory(NULL, "merging nodeset\n");
4e98652
 		    return(NULL);
4e98652
 		}
4e98652
 		set1->nodeTab = temp;
4e98652
+		set1->nodeMax *= 2;
4e98652
 	    }
4e98652
 	    if (n2->type == XML_NAMESPACE_DECL) {
4e98652
 		xmlNsPtr ns = (xmlNsPtr) n2;
4e98652
@@ -3991,14 +3991,14 @@ xmlXPathNodeSetMergeAndClearNoDupls(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
4e98652
 	    } else if (set1->nodeNr >= set1->nodeMax) {
4e98652
 		xmlNodePtr *temp;
4e98652
 
4e98652
-		set1->nodeMax *= 2;
4e98652
 		temp = (xmlNodePtr *) xmlRealloc(
4e98652
-		    set1->nodeTab, set1->nodeMax * sizeof(xmlNodePtr));
4e98652
+		    set1->nodeTab, set1->nodeMax * 2 * sizeof(xmlNodePtr));
4e98652
 		if (temp == NULL) {
4e98652
 		    xmlXPathErrMemory(NULL, "merging nodeset\n");
4e98652
 		    return(NULL);
4e98652
 		}
4e98652
 		set1->nodeTab = temp;
4e98652
+		set1->nodeMax *= 2;
4e98652
 	    }
4e98652
 	    set1->nodeTab[set1->nodeNr++] = n2;
4e98652
 	}
4e98652
-- 
4e98652
1.7.11.4
4e98652