Skip to content

Memory leak with struct #93

@RossComputerGuy

Description

@RossComputerGuy

My code:

https://github.com/PipeletCloud/workflow-runner/blob/60f81af51843e18e0ba3975437110b01b2635bb7/src/main.zig#L81-L87

It looks like when zig-yaml gets to here:

zig-yaml/src/Yaml.zig

Lines 178 to 181 in 1a0cc53

var value: ?Value = map.get(field.name) orelse blk: {
const field_name = try mem.replaceOwned(u8, arena, field.name, "_", "-");
break :blk map.get(field_name);
};

field_name is not deallocated after it is no longer used.

Similar problem here:

return self.parsePointer(arena, T, .{ .scalar = try arena.dupe(u8, scalar) });

error(gpa): memory address 0xffff8a54000c leaked:
/nix/store/7kp0fldzamj5ld6jwxn6sv895ngifpsk-zig-0.14.1/lib/zig/std/mem/Allocator.zig:423:40: 0x108af8f in dupe__anon_8336 (pipelet-workflow-runner)
    const new_buf = try allocator.alloc(T, m.len);
                                       ^
/home/ross/.cache/zig/p/zig_yaml-0.1.0-C1161miEAgBCwL3YAEQZwV_4GyaaT2Xqj9nKB6hNe_TL/src/Yaml.zig:108:75: 0x11191c3 in parseValue__anon_29325 (pipelet-workflow-runner)
            return self.parsePointer(arena, T, .{ .string = try arena.dupe(u8, string) });
                                                                          ^
/home/ross/.cache/zig/p/zig_yaml-0.1.0-C1161miEAgBCwL3YAEQZwV_4GyaaT2Xqj9nKB6hNe_TL/src/Yaml.zig:164:57: 0x110f1fb in parseStruct__anon_28541 (pipelet-workflow-runner)
        @field(parsed, field.name) = try self.parseValue(arena, field.type, unwrapped);
                                                        ^
/home/ross/.cache/zig/p/zig_yaml-0.1.0-C1161miEAgBCwL3YAEQZwV_4GyaaT2Xqj9nKB6hNe_TL/src/Yaml.zig:101:39: 0x1105e3f in parseValue__anon_25007 (pipelet-workflow-runner)
        .@"struct" => self.parseStruct(arena, T, try value.asMap()),
                                      ^
/home/ross/.cache/zig/p/zig_yaml-0.1.0-C1161miEAgBCwL3YAEQZwV_4GyaaT2Xqj9nKB6hNe_TL/src/Yaml.zig:64:31: 0x10fcc47 in parse__anon_24132 (pipelet-workflow-runner)
        return self.parseValue(arena, T, self.docs.items[0]);
                              ^
/home/ross/Pipelet/workflow-runner/src/main.zig:86:28: 0x10fbc3f in main (pipelet-workflow-runner)
    var wf = try yaml.parse(gpa, Workflow);
                           ^

error(gpa): memory address 0xffff8a5c0000 leaked:
/nix/store/7kp0fldzamj5ld6jwxn6sv895ngifpsk-zig-0.14.1/lib/zig/std/mem.zig:3903:39: 0x1118f3b in replaceOwned__anon_29301 (pipelet-workflow-runner)
    const output = try allocator.alloc(T, replacementSize(T, input, needle, replacement));
                                      ^
/home/ross/.cache/zig/p/zig_yaml-0.1.0-C1161miEAgBCwL3YAEQZwV_4GyaaT2Xqj9nKB6hNe_TL/src/Yaml.zig:151:52: 0x110f35f in parseStruct__anon_28541 (pipelet-workflow-runner)
            const field_name = try mem.replaceOwned(u8, arena, field.name, "_", "-");
                                                   ^
/home/ross/.cache/zig/p/zig_yaml-0.1.0-C1161miEAgBCwL3YAEQZwV_4GyaaT2Xqj9nKB6hNe_TL/src/Yaml.zig:101:39: 0x1105e3f in parseValue__anon_25007 (pipelet-workflow-runner)
        .@"struct" => self.parseStruct(arena, T, try value.asMap()),
                                      ^
/home/ross/.cache/zig/p/zig_yaml-0.1.0-C1161miEAgBCwL3YAEQZwV_4GyaaT2Xqj9nKB6hNe_TL/src/Yaml.zig:64:31: 0x10fcc47 in parse__anon_24132 (pipelet-workflow-runner)
        return self.parseValue(arena, T, self.docs.items[0]);
                              ^
/home/ross/Pipelet/workflow-runner/src/main.zig:86:28: 0x10fbc3f in main (pipelet-workflow-runner)
    var wf = try yaml.parse(gpa, Workflow);
                           ^
/nix/store/7kp0fldzamj5ld6jwxn6sv895ngifpsk-zig-0.14.1/lib/zig/std/start.zig:660:37: 0x10f6cfb in posixCallMainAndExit (pipelet-workflow-runner)
            const result = root.main() catch |err| {
                                    ^

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions