diff options
author | STEVANT, Bruno <bruno.stevant@enst-bretagne.fr> | 1970-01-01 00:00:00 +0000 |
---|---|---|
committer | Bjørn Mork <bjorn@mork.no> | 2010-08-06 15:37:36 +0200 |
commit | 98935ef41679eeb6b9b01ef540a853f3983357ed (patch) | |
tree | 4692c2a02d000482a97abdeb3bb995e7c7e1acb5 /lease.c | |
parent | aaa6178df1ecaedc59cafaecee83c8ed714324f4 (diff) |
Fix a memory violation in lease management.
Diffstat (limited to 'lease.c')
-rw-r--r-- | lease.c | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -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); |