mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
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
This commit is contained in:
parent
f92d01c8a8
commit
58ee5f4e61
@ -489,7 +489,7 @@ pub const HeapAllocator = switch (builtin.os.tag) {
|
|||||||
const full_len = os.windows.kernel32.HeapSize(heap_handle, 0, ptr);
|
const full_len = os.windows.kernel32.HeapSize(heap_handle, 0, ptr);
|
||||||
assert(full_len != std.math.maxInt(usize));
|
assert(full_len != std.math.maxInt(usize));
|
||||||
assert(full_len >= amt);
|
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];
|
const buf = @intToPtr([*]u8, aligned_addr)[0..return_len];
|
||||||
getRecordPtr(buf).* = root_addr;
|
getRecordPtr(buf).* = root_addr;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user