Commit 3fd6e93f4f

Luuk de Gram <luuk@degram.dev>
2023-07-17 18:38:02
wasm-linker: prevent double-free on parse failure
1 parent 2672f7d
Changed files (1)
src
link
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();
             }