diff options
| author | LemonBoy <thatlemon@gmail.com> | 2020-09-20 00:10:53 +0200 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-09-20 01:21:29 -0400 |
| commit | 58ee5f4e61cd9b7a9ba65798e2214efa3753a733 (patch) | |
| tree | 783d36ae80c34a91c50d1e5f7768e6116cd6583b /lib/std/heap.zig | |
| parent | f92d01c8a86b525c2caaf07497e16841905cea8c (diff) | |
| download | zig-58ee5f4e61cd9b7a9ba65798e2214efa3753a733.tar.gz zig-58ee5f4e61cd9b7a9ba65798e2214efa3753a733.zip | |
std: Fix metadata corruption in HeapAllocator
HeapAllocator stores the pointer returned by HeapAlloc right after the
data block and, after the recent allocator refactoring, the space for
this pointer was not taken into account in the calculation of the final
block size.
Fixes #5830
Diffstat (limited to 'lib/std/heap.zig')
| -rw-r--r-- | lib/std/heap.zig | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/std/heap.zig b/lib/std/heap.zig index 6db1be539c..16de215cc2 100644 --- a/lib/std/heap.zig +++ b/lib/std/heap.zig @@ -489,7 +489,7 @@ pub const HeapAllocator = switch (builtin.os.tag) { const full_len = os.windows.kernel32.HeapSize(heap_handle, 0, ptr); assert(full_len != std.math.maxInt(usize)); assert(full_len >= amt); - break :init mem.alignBackwardAnyAlign(full_len - (aligned_addr - root_addr), len_align); + break :init mem.alignBackwardAnyAlign(full_len - (aligned_addr - root_addr) - @sizeOf(usize), len_align); }; const buf = @intToPtr([*]u8, aligned_addr)[0..return_len]; getRecordPtr(buf).* = root_addr; |
