diff --git a/library/x509_crt.c b/library/x509_crt.c index 5d82816f2..8024b51a0 100644 --- a/library/x509_crt.c +++ b/library/x509_crt.c @@ -820,7 +820,17 @@ static int x509_get_crt_ext( unsigned char **p, break; default: - return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); + /* + * If this is a non-critical extension, which the oid layer + * supports, but there isn't an x509 parser for it, + * skip the extension. + */ +#if !defined(MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION) + if( is_critical ) + return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); + else +#endif + *p = end_ext_octet; } }