authorgravatar for 78776922+coffeebe4code@users.noreply.github.comChris Clark <78776922+coffeebe4code@users.noreply.github.com> 2025-03-24 14:14:01-05:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-03-25 15:40:55+01:00
logcb3eec285ff254cf36a1e48af06e764f8a9b23bd
tree77a40381dafe0acd1fe4b4f94bb70a8d2b889bad
parent598413357ddd06750e0830db13fbba10f72fe9c0
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.zig.Ast: Fix error case memory leak in parse()


1 files changed, 7 insertions(+), 2 deletions(-)

lib/std/zig/Ast.zig+7-2
...@@ -100,14 +100,19 @@ pub fn parse(gpa: Allocator, source: [:0]const u8, mode: Mode) Allocator.Error!A...@@ -100,14 +100,19 @@ pub fn parse(gpa: Allocator, source: [:0]const u8, mode: Mode) Allocator.Error!A
100 .zon => try parser.parseZon(),100 .zon => try parser.parseZon(),
101 }101 }
102102
103 const extra_data = try parser.extra_data.toOwnedSlice(gpa);
104 errdefer gpa.free(extra_data);
105 const errors = try parser.errors.toOwnedSlice(gpa);
106 errdefer gpa.free(errors);
107
103 // TODO experiment with compacting the MultiArrayList slices here108 // TODO experiment with compacting the MultiArrayList slices here
104 return Ast{109 return Ast{
105 .source = source,110 .source = source,
106 .mode = mode,111 .mode = mode,
107 .tokens = tokens.toOwnedSlice(),112 .tokens = tokens.toOwnedSlice(),
108 .nodes = parser.nodes.toOwnedSlice(),113 .nodes = parser.nodes.toOwnedSlice(),
109 .extra_data = try parser.extra_data.toOwnedSlice(gpa),114 .extra_data = extra_data,
110 .errors = try parser.errors.toOwnedSlice(gpa),115 .errors = errors,
111 };116 };
112}117}
113118