wasm-linker: prevent double-free on parse failure

This commit is contained in:
Luuk de Gram 2023-07-17 18:38:02 +02:00
parent 2672f7d9e8
commit 3fd6e93f4f
No known key found for this signature in database
GPG Key ID: A8CFE58E4DC7D664

View File

@ -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();
}