Commit 9d5462dcb5
Changed files (1)
lib
lib/std/array_hash_map.zig
@@ -773,9 +773,9 @@ pub fn ArrayHashMapUnmanaged(
}
}
+ try self.entries.ensureTotalCapacity(allocator, new_capacity);
const new_bit_index = try IndexHeader.findBitIndex(new_capacity);
const new_header = try IndexHeader.alloc(allocator, new_bit_index);
- try self.entries.ensureTotalCapacity(allocator, new_capacity);
if (self.index_header) |old_header| old_header.free(allocator);
self.insertAllEntriesIntoNewHeader(if (store_hash) {} else ctx, new_header);
@@ -2042,6 +2042,19 @@ test "ensure capacity" {
try testing.expect(initial_capacity == map.capacity());
}
+test "ensure capacity leak" {
+ try testing.checkAllAllocationFailures(std.testing.allocator, struct {
+ pub fn f(allocator: Allocator) !void {
+ var map = AutoArrayHashMap(i32, i32).init(allocator);
+ defer map.deinit();
+
+ var i: i32 = 0;
+ // put more than `linear_scan_max` in so index_header gets allocated.
+ while (i <= 20) : (i += 1) try map.put(i, i);
+ }
+ }.f, .{});
+}
+
test "big map" {
var map = AutoArrayHashMap(i32, i32).init(std.testing.allocator);
defer map.deinit();