From c20de5ff5a7211007b57f8ae8914319debb473c4 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Sun, 31 May 2026 18:25:45 -0700 Subject: [PATCH] fix another memory leak on error --- ...ime:12249,execs:9637,op:int8,pos:0,val:+32 | 31 +++++++++++++++++++ test.zig | 1 + yaml.zig | 1 + 3 files changed, 33 insertions(+) create mode 100644 fuzz/crashes/id:000002,sig:06,src:000000,time:12249,execs:9637,op:int8,pos:0,val:+32 diff --git a/fuzz/crashes/id:000002,sig:06,src:000000,time:12249,execs:9637,op:int8,pos:0,val:+32 b/fuzz/crashes/id:000002,sig:06,src:000000,time:12249,execs:9637,op:int8,pos:0,val:+32 new file mode 100644 index 0000000000000000000000000000000000000000..8a8aa19f56d2a37d370b3bd47aebe637d3403a81 --- /dev/null +++ b/fuzz/crashes/id:000002,sig:06,src:000000,time:12249,execs:9637,op:int8,pos:0,val:+32 @@ -0,0 +1,31 @@ + d: g982zq6e8wsvnmduerpbf8787hu85brugmngn8wf +name: yaml +main: yaml.zig +license: MIT +description: A Yaml parser built on top of libyaml +dependencies: + - src: git https://github.com/yaml/libyaml tag-0.2.5 + id: 8mdbh0zuneb0i3hs5jby5je0heem1i6yxusl7c8y8qx68hqc + license: MIT + c_include_dirs: + - include + c_source_flags: + - -DYAML_VERSION_MAJOR=0 + - -DYAML_VERSION_MINOR=2 + - -DYAML_VERSION_PATCH=5 + - -DYAML_VERSION_STRING="0.2.5" + - -DYAML_DECLARE_STATIC=1 + c_source_files: + - src/api.c + - src/dumper.c + - src/emitter.c + - src/loader.c + - src/parser.c + - src/reader.c + - src/scanner.c + - src/writer.c + + - src: git https://github.com/nektro/zig-extras + +root_dependencies: + - src: git https://github.com/nektro/zig-expect diff --git a/test.zig b/test.zig index dbbef136705d6069d0a2f3155c8bec2b0e1632d9..048e03cc35ba2d75c068102f3478a0024df44a8e 100644 --- a/test.zig +++ b/test.zig @@ -23,6 +23,7 @@ test { fuzzCase(@embedFile("./fuzz/crashes/id:000000,sig:06,src:000000,time:2049 test { fuzzCase(@embedFile("./fuzz/crashes/id:000000,sig:06,src:000000,time:6342,execs:4701,op:arith8,pos:55,val:+3")); } test { fuzzCase(@embedFile("./fuzz/crashes/id:000000,sig:06,src:000000,time:1310,execs:717,op:quick,pos:97")); } test { fuzzCase(@embedFile("./fuzz/crashes/id:000000,sig:06,src:000000,time:1399,execs:755,op:quick,pos:149")); } +test { fuzzCase(@embedFile("./fuzz/crashes/id:000002,sig:06,src:000000,time:12249,execs:9637,op:int8,pos:0,val:+32")); } // zig fmt: on fn parseTest(comptime basename: [:0]const u8) !void { diff --git a/yaml.zig b/yaml.zig index 7f87d1be7a2c6f70565ea8fe670b311dd3bf06ec..31ccc20a4b11af0b4d3ca296a684e421db7b8b61 100644 --- a/yaml.zig +++ b/yaml.zig @@ -284,6 +284,7 @@ fn parse_item(p: *Parser, start: ?Token) Error!Item { fn parse_stream(p: *Parser) Error!Stream { var res = std.ArrayList(Document).init(p.alloc); errdefer res.deinit(); + errdefer for (res.items) |k| k.deinit(p.alloc); while (true) { const tok = try p.next(); -- 2.54.0