optimized parser->success()

This commit is contained in:
Andreas Steffen
2008-04-26 11:08:36 +00:00
parent df231f5488
commit c3628ebc35
8 changed files with 54 additions and 71 deletions
+2 -6
View File
@@ -359,7 +359,7 @@ static bool parse_certificate(private_x509_ac_t *this)
int type = OID_UNKNOWN;
int extn_oid = OID_UNKNOWN;
int sig_alg = OID_UNKNOWN;
bool success = TRUE;
bool success = FALSE;
bool critical;
parser = asn1_parser_create(acObjects, AC_OBJ_ROOF, this->encoding);
@@ -379,14 +379,12 @@ static bool parse_certificate(private_x509_ac_t *this)
if (this->version != 2)
{
DBG1("v%d attribute certificates are not supported", this->version);
success = FALSE;
goto end;
}
break;
case AC_OBJ_HOLDER_ISSUER:
if (!parse_directoryName(object, level, FALSE, &this->holderIssuer))
{
success = FALSE;
goto end;
}
break;
@@ -396,14 +394,12 @@ static bool parse_certificate(private_x509_ac_t *this)
case AC_OBJ_ENTITY_NAME:
if (!parse_directoryName(object, level, TRUE, &this->entityName))
{
success = FALSE;
goto end;
}
break;
case AC_OBJ_ISSUER_NAME:
if (!parse_directoryName(object, level, FALSE, &this->issuerName))
{
success = FALSE;
goto end;
}
break;
@@ -492,9 +488,9 @@ static bool parse_certificate(private_x509_ac_t *this)
break;
}
}
success = parser->success(parser);
end:
success &= parser->success(parser);
parser->destroy(parser);
return success;
}
+7 -8
View File
@@ -231,7 +231,7 @@ static bool parse_otherName(chunk_t blob, int level0)
chunk_t object;
int objectID;
int oid = OID_UNKNOWN;
bool success = TRUE;
bool success = FALSE;
parser = asn1_parser_create(otherNameObjects,ON_OBJ_ROOF, blob);
parser->set_top_level(parser, level0);
@@ -249,7 +249,6 @@ static bool parse_otherName(chunk_t blob, int level0)
if (!asn1_parse_simple_object(&object, ASN1_UTF8STRING,
parser->get_level(parser)+1, "xmppAddr"))
{
success = FALSE;
goto end;
}
}
@@ -258,9 +257,9 @@ static bool parse_otherName(chunk_t blob, int level0)
break;
}
}
success = parser->success(parser);
end:
success &= parser->success(parser);
parser->destroy(parser);
return success;
}
@@ -736,7 +735,7 @@ static bool parse_certificate(private_x509_cert_t *this)
int extn_oid = OID_UNKNOWN;
int key_alg = OID_UNKNOWN;
int sig_alg = OID_UNKNOWN;
bool success = TRUE;
bool success = FALSE;
bool critical;
parser = asn1_parser_create(certObjects, X509_OBJ_ROOF, this->encoding);
@@ -795,7 +794,6 @@ static bool parse_certificate(private_x509_cert_t *this)
break;
default:
DBG1("parsing key type %d failed", key_alg);
success = FALSE;
goto end;
}
}
@@ -845,7 +843,9 @@ static bool parse_certificate(private_x509_cert_t *this)
case OID_NS_COMMENT:
if (!asn1_parse_simple_object(&object, ASN1_IA5STRING,
level, oid_names[extn_oid].name))
return FALSE;
{
goto end;
}
break;
default:
break;
@@ -857,7 +857,6 @@ static bool parse_certificate(private_x509_cert_t *this)
if (this->algorithm != sig_alg)
{
DBG1(" signature algorithms do not agree");
success = FALSE;
goto end;
}
break;
@@ -868,9 +867,9 @@ static bool parse_certificate(private_x509_cert_t *this)
break;
}
}
success = parser->success(parser);
end:
success &= parser->success(parser);
parser->destroy(parser);
return success;
}
+2 -4
View File
@@ -200,7 +200,7 @@ static bool parse(private_x509_crl_t *this)
chunk_t userCertificate = chunk_empty;
int objectID;
int sig_alg = OID_UNKNOWN;
bool success = TRUE;
bool success = FALSE;
bool critical;
revoked_t *revoked = NULL;
@@ -276,7 +276,6 @@ static bool parse(private_x509_crl_t *this)
if (!asn1_parse_simple_object(&object, ASN1_INTEGER,
level, "crlNumber"))
{
success = FALSE;
goto end;
}
this->crlNumber = object;
@@ -289,7 +288,6 @@ static bool parse(private_x509_crl_t *this)
if (this->algorithm != sig_alg)
{
DBG1(" signature algorithms do not agree");
success = FALSE;
goto end;
}
break;
@@ -301,9 +299,9 @@ static bool parse(private_x509_crl_t *this)
break;
}
}
success = parser->success(parser);
end:
success &= parser->success(parser);
parser->destroy(parser);
return success;
}
@@ -309,7 +309,7 @@ static bool parse_singleResponse(private_x509_ocsp_response_t *this,
asn1_parser_t *parser;
chunk_t object;
int objectID;
bool success;
bool success = FALSE;
single_response_t *response;
@@ -378,7 +378,6 @@ static bool parse_singleResponse(private_x509_ocsp_response_t *this,
}
success = parser->success(parser);
parser->destroy(parser);
if (success)
{
if (this->usableUntil == UNDEFINED_TIME)
@@ -410,7 +409,7 @@ static bool parse_responses(private_x509_ocsp_response_t *this,
asn1_parser_t *parser;
chunk_t object;
int objectID;
bool success = TRUE;
bool success = FALSE;
parser = asn1_parser_create(responsesObjects, RESPONSES_ROOF, blob);
parser->set_top_level(parser, level0);
@@ -423,7 +422,6 @@ static bool parse_responses(private_x509_ocsp_response_t *this,
if (!parse_singleResponse(this, object,
parser->get_level(parser)+1))
{
success = FALSE;
goto end;
}
break;
@@ -431,9 +429,9 @@ static bool parse_responses(private_x509_ocsp_response_t *this,
break;
}
}
success = parser->success(parser);
end:
success &= parser->success(parser);
parser->destroy(parser);
return success;
}
@@ -499,7 +497,7 @@ static bool parse_basicOCSPResponse(private_x509_ocsp_response_t *this,
int extn_oid = OID_UNKNOWN;
u_int responses_level = level0;
certificate_t *cert;
bool success = TRUE;
bool success = FALSE;
bool critical;
parser = asn1_parser_create(basicResponseObjects, BASIC_RESPONSE_ROOF, blob);
@@ -519,7 +517,6 @@ static bool parse_basicOCSPResponse(private_x509_ocsp_response_t *this,
if (version != OCSP_BASIC_RESPONSE_VERSION)
{
DBG1(" ocsp ResponseData version %d not supported", version);
success = FALSE;
goto end;
}
break;
@@ -575,11 +572,10 @@ static bool parse_basicOCSPResponse(private_x509_ocsp_response_t *this,
}
}
}
success = parser->success(parser);
end:
success &= parser->success(parser);
parser->destroy(parser);
if (success)
{
if (!this->responderId)
@@ -655,9 +651,9 @@ static bool parse_OCSPResponse(private_x509_ocsp_response_t *this)
break;
}
}
success = parser->success(parser);
end:
success &= parser->success(parser);
parser->destroy(parser);
return success;
}