|
|
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 |
|