missing NULL check on strdup
---
src/util/hash.c | 18 +++++++++++++++---
1 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/src/util/hash.c b/src/util/hash.c
index e102d7d..893fe96 100644
--- a/src/util/hash.c
+++ b/src/util/hash.c
@@ -254,6 +254,7 @@ virHashAddEntry(virHashTablePtr table, const char *name, void
*userdata)
unsigned long key, len = 0;
virHashEntryPtr entry;
virHashEntryPtr insert;
+ char *new_name;
if ((table == NULL) || (name == NULL))
return (-1);
@@ -282,12 +283,17 @@ virHashAddEntry(virHashTablePtr table, const char *name, void
*userdata)
return (-1);
}
- entry->name = strdup(name);
+ new_name = strdup(name);
+ if (new_name == NULL) {
+ if (insert != NULL)
+ VIR_FREE(entry);
+ return (-1);
+ }
+ entry->name = new_name;
entry->payload = userdata;
entry->next = NULL;
entry->valid = 1;
-
if (insert != NULL)
insert->next = entry;
@@ -354,7 +360,13 @@ virHashUpdateEntry(virHashTablePtr table, const char *name,
return (-1);
}
- entry->name = strdup(name);
+ new_name= strdup(name);
+ if (new_name == NULL) {
+ if (insert != NULL)
+ VIR_FREE(entry);
+ return (-1);
+ }
+ entry->name = new_name;
entry->payload = userdata;
entry->next = NULL;
entry->valid = 1;
--
1.7.4