2
0
Эх сурвалжийг харах

hashindex.c: hashindex_resize check hashindex_set rc (contract)

Marian Beermann 9 жил өмнө
parent
commit
02bb79dcbb
1 өөрчлөгдсөн 7 нэмэгдсэн , 1 устгасан
  1. 7 1
      borg/_hashindex.c

+ 7 - 1
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;