diff --git a/borg/_hashindex.c b/borg/_hashindex.c index 4599fe0fa..bfa3ef09b 100644 --- a/borg/_hashindex.c +++ b/borg/_hashindex.c @@ -100,6 +100,8 @@ static int hashindex_delete(HashIndex *index, const void *key); static void *hashindex_next_key(HashIndex *index, const void *key); /* Private API */ +static void hashindex_free(HashIndex *index); + static int hashindex_index(HashIndex *index, const void *key) { @@ -148,7 +150,11 @@ hashindex_resize(HashIndex *index, int capacity) return 0; } while((key = hashindex_next_key(index, key))) { - hashindex_set(new, key, key + key_size); + if(!hashindex_set(new, key, key + key_size)) { + /* This can only happen if there's a bug in the code calculating capacity */ + hashindex_free(new); + return 0; + } } free(index->buckets); index->buckets = new->buckets;