aboutsummaryrefslogtreecommitdiff
path: root/lease.c
diff options
context:
space:
mode:
authorSTEVANT, Bruno <bruno.stevant@enst-bretagne.fr>1970-01-01 00:00:00 +0000
committerBjørn Mork <bjorn@mork.no>2010-08-06 15:37:36 +0200
commit98935ef41679eeb6b9b01ef540a853f3983357ed (patch)
tree4692c2a02d000482a97abdeb3bb995e7c7e1acb5 /lease.c
parentaaa6178df1ecaedc59cafaecee83c8ed714324f4 (diff)
Fix a memory violation in lease management.
Diffstat (limited to 'lease.c')
-rw-r--r--lease.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/lease.c b/lease.c
index 2e86556..fdf3d37 100644
--- a/lease.c
+++ b/lease.c
@@ -217,6 +217,8 @@ hash_table_cleanup(table)
while (!LIST_EMPTY(&table->table[i])) {
struct hash_entry *entry = LIST_FIRST(&table->table[i]);
LIST_REMOVE(entry, list);
+ if (entry->val)
+ free(entry->val);
free(entry);
}
}
@@ -237,10 +239,14 @@ hash_table_add(table, val, size)
return (-1);
}
- if ((entry = malloc(sizeof(*entry) + size)) == NULL) {
+ if ((entry = malloc(sizeof(*entry))) == NULL) {
return (-1);
}
memset(entry, 0, sizeof(*entry));
+
+ if ((entry->val = malloc(size)) == NULL) {
+ return (-1);
+ }
memcpy(entry->val, val, size);
i = table->hash(val) % table->size;
@@ -265,6 +271,8 @@ hash_table_remove(table, val)
}
LIST_REMOVE(entry, list);
+ if (entry->val)
+ free(entry->val);
free(entry);
return (0);