zig

fork of https://codeberg.org/ziglang/zig
Log | Tree | Refs | README | LICENSE

commit 3fd6e93f4f6f34658d5e198064f54e1dad09e241 (tree)
parent 2672f7d9e8bcfc62b16a7073bddf330df4701762
Author: Luuk de Gram <luuk@degram.dev>
Date:   Mon, 17 Jul 2023 18:38:02 +0200

wasm-linker: prevent double-free on parse failure

Diffstat:
Msrc/link/Wasm/Object.zig | 11++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/link/Wasm/Object.zig b/src/link/Wasm/Object.zig @@ -353,9 +353,14 @@ fn Parser(comptime ReaderType: type) type { var debug_names = std.ArrayList(u8).init(gpa); errdefer { - while (relocatable_data.popOrNull()) |rel_data| { - gpa.free(rel_data.data[0..rel_data.size]); - } else relocatable_data.deinit(); + // only free the inner contents of relocatable_data if we didn't + // assign it to the object yet. + if (parser.object.relocatable_data.len == 0) { + for (relocatable_data.items) |rel_data| { + gpa.free(rel_data.data[0..rel_data.size]); + } + relocatable_data.deinit(); + } gpa.free(debug_names.items); debug_names.deinit(); }