git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commite7476f270b58afa6d9c7486acd0d46c03cbce901
parentf3e2d6e0f7
authorIsaac Freund <[email protected]>
date2020-08-21 20:06
config: handle alloc failure in Mapping init

 river/Mapping.zig | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/river/Mapping.zig b/river/Mapping.zig
index 61df624..3d80624 100644
--- a/river/Mapping.zig
+++ b/river/Mapping.zig
@@ -31,8 +31,12 @@ pub fn init(
     modifiers: u32,
     command_args: []const []const u8,
 ) !Self {
-    var owned_args = try allocator.alloc([]u8, command_args.len);
-    for (command_args) |arg, i| owned_args[i] = try std.mem.dupe(allocator, u8, arg);
+    const owned_args = try allocator.alloc([]u8, command_args.len);
+    errdefer allocator.free(owned_args);
+    for (command_args) |arg, i| {
+        errdefer for (owned_args[0..i]) |a| allocator.free(a);
+        owned_args[i] = try std.mem.dupe(allocator, u8, arg);
+    }
     return Self{
         .keysym = keysym,
         .modifiers = modifiers,