Parse CRL extensions in a switch statement

This commit is contained in:
Martin Willi
2011-01-05 16:46:03 +01:00
parent 6c547631c0
commit d14d3b31b8
+24 -18
View File
@@ -258,35 +258,41 @@ static bool parse(private_x509_crl_t *this)
break; break;
case CRL_OBJ_CRL_ENTRY_EXTN_VALUE: case CRL_OBJ_CRL_ENTRY_EXTN_VALUE:
case CRL_OBJ_EXTN_VALUE: case CRL_OBJ_EXTN_VALUE:
{ {
int extn_oid = asn1_known_oid(extnID); int extn_oid = asn1_known_oid(extnID);
if (revoked && extn_oid == OID_CRL_REASON_CODE) switch (extn_oid)
{ {
if (*object.ptr == ASN1_ENUMERATED && case OID_CRL_REASON_CODE:
asn1_length(&object) == 1) if (revoked)
{ {
revoked->reason = *object.ptr; if (object.len && *object.ptr == ASN1_ENUMERATED &&
asn1_length(&object) == 1)
{
revoked->reason = *object.ptr;
}
DBG2(DBG_LIB, " '%N'", crl_reason_names,
revoked->reason);
} }
DBG2(DBG_LIB, " '%N'", crl_reason_names, break;
revoked->reason); case OID_AUTHORITY_KEY_ID:
} this->authKeyIdentifier =
else if (extn_oid == OID_AUTHORITY_KEY_ID) x509_parse_authorityKeyIdentifier(
{ object, level, &this->authKeySerialNumber);
this->authKeyIdentifier = x509_parse_authorityKeyIdentifier(object, break;
level, &this->authKeySerialNumber); case OID_CRL_NUMBER:
}
else if (extn_oid == OID_CRL_NUMBER)
{
if (!asn1_parse_simple_object(&object, ASN1_INTEGER, if (!asn1_parse_simple_object(&object, ASN1_INTEGER,
level, "crlNumber")) level, "crlNumber"))
{ {
goto end; goto end;
} }
this->crlNumber = object; this->crlNumber = object;
} break;
default:
break;
} }
break; break;
}
case CRL_OBJ_ALGORITHM: case CRL_OBJ_ALGORITHM:
{ {
this->algorithm = asn1_parse_algorithmIdentifier(object, level, NULL); this->algorithm = asn1_parse_algorithmIdentifier(object, level, NULL);