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 noreply@github.comGitHub <noreply@github.com> 2025-03-24 20:14:01+01:00
log525466b49d4acc0d33f528bc9d53392c309a43bd
tree9f3c552243ec76738e30b9216245eafc9e3c5f85
parent89db4f2e9390a75b73be3d20a95df78e376cfdd5
signaturebadge-check Signed by PGP key B5690EEEBB952194

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


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

lib/std/zig/Ast.zig+7-2
...@@ -181,14 +181,19 @@ pub fn parse(gpa: Allocator, source: [:0]const u8, mode: Mode) Allocator.Error!A...@@ -181,14 +181,19 @@ pub fn parse(gpa: Allocator, source: [:0]const u8, mode: Mode) Allocator.Error!A
181 .zon => try parser.parseZon(),181 .zon => try parser.parseZon(),
182 }182 }
183183
184 const extra_data = try parser.extra_data.toOwnedSlice(gpa);
185 errdefer gpa.free(extra_data);
186 const errors = try parser.errors.toOwnedSlice(gpa);
187 errdefer gpa.free(errors);
188
184 // TODO experiment with compacting the MultiArrayList slices here189 // TODO experiment with compacting the MultiArrayList slices here
185 return Ast{190 return Ast{
186 .source = source,191 .source = source,
187 .mode = mode,192 .mode = mode,
188 .tokens = tokens.toOwnedSlice(),193 .tokens = tokens.toOwnedSlice(),
189 .nodes = parser.nodes.toOwnedSlice(),194 .nodes = parser.nodes.toOwnedSlice(),
190 .extra_data = try parser.extra_data.toOwnedSlice(gpa),195 .extra_data = extra_data,
191 .errors = try parser.errors.toOwnedSlice(gpa),196 .errors = errors,
192 };197 };
193}198}
194199