| ... | ... | @@ -85,6 +85,14 @@ test toDot { |
| 85 | 85 | } |
| 86 | 86 | } |
| 87 | 87 | |
| 88 | test "malformed OID" { |
| 89 | var empty: der.Decoder = .{ .bytes = &.{ 0x06, 0x00 } }; |
| 90 | try std.testing.expectError(error.EndOfStream, decodeDer(&empty)); |
| 91 | |
| 92 | var truncated: der.Decoder = .{ .bytes = &.{ 0x06, 0x02, 0x2a, 0x80 } }; |
| 93 | try std.testing.expectError(error.InvalidEncoding, decodeDer(&truncated)); |
| 94 | } |
| 95 | |
| 88 | 96 | const TestCase = struct { |
| 89 | 97 | encoded: []const u8, |
| 90 | 98 | dot_notation: []const u8, |
| ... | ... | @@ -109,7 +117,10 @@ pub const asn1_tag = asn1.Tag.init(.oid, false, .universal); |
| 109 | 117 | |
| 110 | 118 | pub fn decodeDer(decoder: *der.Decoder) !Oid { |
| 111 | 119 | const ele = try decoder.element(asn1_tag.toExpected()); |
| 112 | | return Oid{ .encoded = decoder.view(ele) }; |
| 120 | const encoded = decoder.view(ele); |
| 121 | if (encoded.len == 0) return error.EndOfStream; |
| 122 | if (encoded[encoded.len - 1] & 0x80 != 0) return error.InvalidEncoding; |
| 123 | return Oid{ .encoded = encoded }; |
| 113 | 124 | } |
| 114 | 125 | |
| 115 | 126 | pub fn encodeDer(self: Oid, encoder: *der.Encoder) !void { |