authorgravatar for luuk@degram.devLuuk de Gram <luuk@degram.dev> 2023-07-17 18:38:02+02:00
committergravatar for luuk@degram.devLuuk de Gram <luuk@degram.dev> 2023-07-19 17:22:46+02:00
log3fd6e93f4f6f34658d5e198064f54e1dad09e241
tree35163aae30dc40b4f0dad0611419aa922ab0a306
parent2672f7d9e8bcfc62b16a7073bddf330df4701762
signaturelock-open Commit is signed but in an unrecognized format.

wasm-linker: prevent double-free on parse failure


1 files changed, 8 insertions(+), 3 deletions(-)

src/link/Wasm/Object.zig+8-3
...@@ -353,9 +353,14 @@ fn Parser(comptime ReaderType: type) type {...@@ -353,9 +353,14 @@ fn Parser(comptime ReaderType: type) type {
353 var debug_names = std.ArrayList(u8).init(gpa);353 var debug_names = std.ArrayList(u8).init(gpa);
354354
355 errdefer {355 errdefer {
356 while (relocatable_data.popOrNull()) |rel_data| {356 // only free the inner contents of relocatable_data if we didn't
357 gpa.free(rel_data.data[0..rel_data.size]);357 // assign it to the object yet.
358 } else relocatable_data.deinit();358 if (parser.object.relocatable_data.len == 0) {
359 for (relocatable_data.items) |rel_data| {
360 gpa.free(rel_data.data[0..rel_data.size]);
361 }
362 relocatable_data.deinit();
363 }
359 gpa.free(debug_names.items);364 gpa.free(debug_names.items);
360 debug_names.deinit();365 debug_names.deinit();
361 }366 }