From 7149bf3f5f044383a259f58d17a330edda82037a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Arrufat?= Date: Mon, 25 May 2026 20:22:44 +0200 Subject: [PATCH] Schema: reject duplicate fields in buildValue --- src/script/Schema.zig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/script/Schema.zig b/src/script/Schema.zig index c55e7d7f..1b92768f 100644 --- a/src/script/Schema.zig +++ b/src/script/Schema.zig @@ -246,7 +246,9 @@ fn buildValue(self: Schema, arena: std.mem.Allocator, pairs: []const KvPair, dia try obj.ensureTotalCapacity(pairs.len); for (pairs) |p| { const v = try self.coerce(arena, p.key, p.value, diag); - try obj.put(p.key, v); + const gop = try obj.getOrPut(p.key); + if (gop.found_existing) return error.DuplicateField; + gop.value_ptr.* = v; } return .{ .object = obj }; } @@ -745,6 +747,10 @@ test "parseValue: duplicate case-variants of the same field are rejected" { error.DuplicateField, click.parseValue(arena.allocator(), "{\"Selector\":\"#a\",\"selector\":\"#b\"}"), ); + try testing.expectError( + error.DuplicateField, + click.parseValue(arena.allocator(), "Selector='#a' selector='#b'"), + ); } test "parseValue: setChecked defaults checked=true when omitted" {