| author | |
| committer | |
| log | 434c9fe4d79d3513bd36aeaf2f8a90dd28f7cb37 |
| tree | 2261a7cb531a5975ac3b3b49147f060df214fa23 |
| parent | ff24d73096cde9792b6156825ad368981e948e2b |
The API for std.lang.Type changed in PR #35234, but the ASN.1 tag
encoder is using the old API. Update the check for an exhaustive enum
for the new API, and add a test that exercises this prong of the
encoder.2 files changed, 21 insertions(+), 1 deletions(-)
lib/std/crypto/codecs/asn1.zig+1-1| ... | ... | @@ -162,7 +162,7 @@ pub const Tag = struct { |
| 162 | 162 | .int => return universal(.integer, false), |
| 163 | 163 | .@"enum" => |e| { |
| 164 | 164 | if (@hasDecl(T, "oids")) return Oid.asn1_tag; |
| 165 | return universal(if (e.is_exhaustive) .enumerated else .integer, false); | |
| 165 | return universal(if (e.mode == .exhaustive) .enumerated else .integer, false); | |
| 166 | 166 | }, |
| 167 | 167 | .optional => |o| return fromZig(o.child), |
| 168 | 168 | .null => return universal(.null, false), |
lib/std/crypto/codecs/asn1/der/Encoder.zig+20| ... | ... | @@ -21,6 +21,26 @@ pub fn any(self: *Encoder, val: anytype) !void { |
| 21 | 21 | try self.anyTag(Tag.fromZig(T), val); |
| 22 | 22 | } |
| 23 | 23 | |
| 24 | test any { | |
| 25 | const Enum = enum(u8) { | |
| 26 | x = 0, | |
| 27 | }; | |
| 28 | ||
| 29 | try checkAnyEncoding(u16, 0, &.{ 0x02, 0x01, 0x00 }); | |
| 30 | try checkAnyEncoding(Enum, .x, &.{ 0x0a, 0x01, 0x00 }); | |
| 31 | } | |
| 32 | ||
| 33 | fn checkAnyEncoding(T: type, value: T, expected: []const u8) !void { | |
| 34 | var encoder: @This() = .init(std.testing.allocator); | |
| 35 | defer encoder.deinit(); | |
| 36 | ||
| 37 | try encoder.any(value); | |
| 38 | const encoded = try encoder.buffer.toOwnedSlice(); | |
| 39 | defer std.testing.allocator.free(encoded); | |
| 40 | ||
| 41 | try std.testing.expectEqualSlices(u8, expected, encoded); | |
| 42 | } | |
| 43 | ||
| 24 | 44 | fn anyTag(self: *Encoder, tag_: Tag, val: anytype) !void { |
| 25 | 45 | const T = @TypeOf(val); |
| 26 | 46 | if (std.meta.hasFn(T, "encodeDer")) return try val.encodeDer(self); |