diff --git a/lib/std/crypto/Certificate/Bundle.zig b/lib/std/crypto/Certificate/Bundle.zig index b3b5409d27..fe1ef4c0c3 100644 --- a/lib/std/crypto/Certificate/Bundle.zig +++ b/lib/std/crypto/Certificate/Bundle.zig @@ -244,10 +244,16 @@ pub fn parseCert(cb: *Bundle, gpa: Allocator, decoded_start: u32, now_sec: i64) // the subject name, we pre-parse all of them to make sure and only // include in the bundle ones that we know will parse. This way we can // use `catch unreachable` later. - const parsed_cert = try Certificate.parse(.{ + const parsed_cert = Certificate.parse(.{ .buffer = cb.bytes.items, .index = decoded_start, - }); + }) catch |err| switch (err) { + error.CertificateHasUnrecognizedObjectId => { + cb.bytes.items.len = decoded_start; + return; + }, + else => |e| return e, + }; if (now_sec > parsed_cert.validity.not_after) { // Ignore expired cert. cb.bytes.items.len = decoded_start;