oven-sh/bun · error · TypeError
UNSUPPORTED_EXTENSION_FEATURE
UNSUPPORTED_EXTENSION_FEATURE
Error message
UNSUPPORTED_EXTENSION_FEATURE
What it means
CertError::UNSUPPORTED_EXTENSION_FEATURE maps BoringSSL X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE (verify code 45). A certificate/CRL extension uses a feature the verifying implementation does not support during path validation (classic cases: delta CRL indicators, certain policy-constraint processing). Message: "Unsupported extension feature".
Source
Thrown at src/http/error.rs:211
#[error("UNHANDLED_CRITICAL_CRL_EXTENSION")]
UNHANDLED_CRITICAL_CRL_EXTENSION,
#[error("INVALID_NON_CA")]
INVALID_NON_CA,
#[error("PROXY_PATH_LENGTH_EXCEEDED")]
PROXY_PATH_LENGTH_EXCEEDED,
#[error("KEYUSAGE_NO_DIGITAL_SIGNATURE")]
KEYUSAGE_NO_DIGITAL_SIGNATURE,
#[error("PROXY_CERTIFICATES_NOT_ALLOWED")]
PROXY_CERTIFICATES_NOT_ALLOWED,
#[error("INVALID_EXTENSION")]
INVALID_EXTENSION,
#[error("INVALID_POLICY_EXTENSION")]
INVALID_POLICY_EXTENSION,
#[error("NO_EXPLICIT_POLICY")]
NO_EXPLICIT_POLICY,
#[error("DIFFERENT_CRL_SCOPE")]
DIFFERENT_CRL_SCOPE,
#[error("UNSUPPORTED_EXTENSION_FEATURE")]
UNSUPPORTED_EXTENSION_FEATURE,
#[error("UNNESTED_RESOURCE")]
UNNESTED_RESOURCE,
#[error("PERMITTED_VIOLATION")]
PERMITTED_VIOLATION,
#[error("EXCLUDED_VIOLATION")]
EXCLUDED_VIOLATION,
#[error("SUBTREE_MINMAX")]
SUBTREE_MINMAX,
#[error("APPLICATION_VERIFICATION")]
APPLICATION_VERIFICATION,
#[error("UNSUPPORTED_CONSTRAINT_TYPE")]
UNSUPPORTED_CONSTRAINT_TYPE,
#[error("UNSUPPORTED_CONSTRAINT_SYNTAX")]
UNSUPPORTED_CONSTRAINT_SYNTAX,
#[error("UNSUPPORTED_NAME_SYNTAX")]
UNSUPPORTED_NAME_SYNTAX,
#[error("CRL_PATH_VALIDATION_ERROR")]View on GitHub (pinned to 8c5296ac45)
Solutions
- Identify the offending extension: openssl crl -in crl.pem -noout -text (look for Delta CRL Indicator / freshestCRL) or openssl x509 -text
- Reissue the CRL/cert without the unsupported feature (publish complete CRLs, drop delta indicators)
- Update the CRL distribution setup so verifiers fetch the base CRL, not the delta
- If the feature is mandated by your PKI, verify with a stack that supports it and report the incompatibility upstream
Example fix
# before: publishing a delta CRL at the CDP URL [crl_ext] issuingDistributionPoint = URI:http://crl.example.com/delta.crl # after: publish the full CRL at the CDP URL issuingDistributionPoint = URI:http://crl.example.com/full.crl
Defensive patterns
Strategy: try-catch
Type guard
export function isUnsupportedExtensionFeature(e): e is Error & { code: "UNSUPPORTED_EXTENSION_FEATURE" } {
return e instanceof Error && (e as any).code === "UNSUPPORTED_EXTENSION_FEATURE";
} Try / catch
try {
await fetch(url);
} catch (e) {
if (e?.code === "UNSUPPORTED_EXTENSION_FEATURE") {
// an extension feature (e.g. delta CRL) is beyond what the verifier supports
fallbackToKnownGoodMirror(url);
} else throw e;
} Prevention
- Keep CRL/cert extension usage boring: no delta-CRL indicators unless every verifier supports them
- Track verifier capabilities (OpenSSL vs BoringSSL feature sets) when choosing PKI features
- Test new PKI features against the strictest client that will connect
When it happens
Trigger: CRL checking enabled and the CRL carries a deltaCRL indicator or other feature BoringSSL's verifier refuses to process; cert extensions that encode options the path builder explicitly declines (rather than merely ignores).
Common situations: PKIs that publish delta CRLs and a verifier that follows CDPs into the delta instead of the base CRL; migration from OpenSSL (which tolerates the feature) to a BoringSSL-based client; appliances generating CRLs with unusual extension combinations.
Related errors
AI-assisted analysis of oven-sh/bun@8c5296ac45 (2026-08-16).
Data as JSON: /api/errors/bc159cf77a66efde.
Report an issue: GitHub.