authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2026-09-30 16:08:53-07:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2026-09-30 16:19:42-07:00
log398f4cada30d4a73a95536ac526cad15e3769bc5
tree18b3c26b49bce405fb87e9ee7204dd388e24153b
parent92b739ac096dc65a243c5ddf51f94b43bf200650
signature Commit is signed but in an unrecognized format.

std.zon: fix silent merge conflict


1 files changed, 20 insertions(+), 10 deletions(-)

lib/std/zon/Serializer.zig+20-10
...@@ -476,23 +476,33 @@ test "fuzz string escaping" {...@@ -476,23 +476,33 @@ test "fuzz string escaping" {
476}476}
477477
478fn fuzzString(options: StringOptions, smith: *std.testing.Smith) !void {478fn fuzzString(options: StringOptions, smith: *std.testing.Smith) !void {
479 var arena: std.heap.ArenaAllocator = .init(std.testing.allocator);479 const gpa = std.testing.allocator;
480 defer arena.deinit();
481 const allocator = arena.allocator();
482480
483 var allocating: Writer.Allocating = .init(allocator);481 var arena_state: std.heap.ArenaAllocator = .init(gpa);
482 defer arena_state.deinit();
483 const arena = arena_state.allocator();
484
485 var allocating: Writer.Allocating = .init(gpa);
484 defer allocating.deinit();486 defer allocating.deinit();
485 var s: Serializer = .{ .writer = &allocating.writer };487 var s: Serializer = .{ .writer = &allocating.writer };
486488
487 var buf: [0x100]u8 = undefined;489 var buf: [0x100]u8 = undefined;
488 const input_len = smith.slice(&buf);490 const input = buf[0..smith.slice(&buf)];
489 const input = buf[0..input_len];
490 try s.string(input, options);491 try s.string(input, options);
491492
492 const encoded = try allocator.dupeSentinel(u8, allocating.written(), 0);493 var parse_diags: std.zon.parse.Diagnostics = undefined;
493 defer allocator.free(encoded);494 const actual = std.zon.parse.fromSlice([]const u8, .{
494 const actual = try std.zon.parse.fromSliceAlloc([]const u8, allocator, encoded, null, .{});495 .gpa = gpa,
495 defer std.zon.parse.free(allocator, actual);496 .arena = arena,
497 .source = try arena.dupeSentinel(u8, allocating.written(), 0),
498 .diagnostics = &parse_diags,
499 }) catch |err| switch (err) {
500 error.OutOfMemory => |e| return e,
501 error.ParseZon => |e| {
502 std.log.err("failed to parse serialized ZON: {f}", .{parse_diags.fmt("fuzz_input")});
503 return e;
504 },
505 };
496 try std.testing.expectEqualSlices(u8, input, actual);506 try std.testing.expectEqualSlices(u8, input, actual);
497}507}
498508