From 67ffff4caa780f74be04a02676c7d8970a2d447d Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Mon, 19 Aug 2024 22:52:19 +0200 Subject: [PATCH] fix: allocate and free entry.name in open_recent_project palette --- src/tui/mode/overlay/open_recent_project.zig | 10 +++++++--- src/tui/mode/overlay/palette.zig | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/tui/mode/overlay/open_recent_project.zig b/src/tui/mode/overlay/open_recent_project.zig index 9546d4a..16bd6bd 100644 --- a/src/tui/mode/overlay/open_recent_project.zig +++ b/src/tui/mode/overlay/open_recent_project.zig @@ -20,16 +20,20 @@ pub const Match = struct { matches: []const usize, }; +pub fn deinit(palette: *Type) void { + for (palette.entries.items) |entry| + palette.a.free(entry.name); +} + pub fn load_entries(palette: *Type) !void { const rsp = try project_manager.request_recent_projects(palette.a); + defer palette.a.free(rsp.buf); var iter: []const u8 = rsp.buf; var len = try cbor.decodeArrayHeader(&iter); while (len > 0) : (len -= 1) { var name: []const u8 = undefined; if (try cbor.matchValue(&iter, cbor.extract(&name))) { - (palette.entries.addOne() catch @panic("oom")).* = .{ - .name = name, - }; + (try palette.entries.addOne()).* = .{ .name = try palette.a.dupe(u8, name) }; } else return error.InvalidMessageField; } } diff --git a/src/tui/mode/overlay/palette.zig b/src/tui/mode/overlay/palette.zig index 3418dc2..4b84385 100644 --- a/src/tui/mode/overlay/palette.zig +++ b/src/tui/mode/overlay/palette.zig @@ -89,6 +89,8 @@ pub fn Create(options: type) type { pub fn deinit(self: *Self) void { self.commands.deinit(); + if (@hasDecl(options, "deinit")) + options.deinit(self); self.entries.deinit(); tui.current().message_filters.remove_ptr(self); if (tui.current().mainview.dynamic_cast(mainview)) |mv|