diff options
author | tb <> | 2021-12-24 02:12:31 +0000 |
---|---|---|
committer | tb <> | 2021-12-24 02:12:31 +0000 |
commit | 5f20e4d06b4c24bf12b9027a91e9d8a3de6b6c62 (patch) | |
tree | 4fc7428ab504e6ecb1a7d6290242c0a0bb113294 /src | |
parent | eb90e56d8fe112f145d3661057d6bc4d40d45aec (diff) | |
download | openbsd-5f20e4d06b4c24bf12b9027a91e9d8a3de6b6c62.tar.gz openbsd-5f20e4d06b4c24bf12b9027a91e9d8a3de6b6c62.tar.bz2 openbsd-5f20e4d06b4c24bf12b9027a91e9d8a3de6b6c62.zip |
Turn asserts in ASIdentifierChoice_canonize() into error checks
The first assert ensure that a stack that was just sorted in a stronger
sense is sorted in a weak sense and the second assert ensures that
the result of the canonization procedure is canonical. All callers check
for error, so these asserts don't do anything useful.
ok jsing
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/x509/x509_asid.c | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/src/lib/libcrypto/x509/x509_asid.c b/src/lib/libcrypto/x509/x509_asid.c index 808dad7552..216fd610c2 100644 --- a/src/lib/libcrypto/x509/x509_asid.c +++ b/src/lib/libcrypto/x509/x509_asid.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x509_asid.c,v 1.22 2021/12/24 02:07:37 tb Exp $ */ | 1 | /* $OpenBSD: x509_asid.c,v 1.23 2021/12/24 02:12:31 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Contributed to the OpenSSL Project by the American Registry for | 3 | * Contributed to the OpenSSL Project by the American Registry for |
4 | * Internet Numbers ("ARIN"). | 4 | * Internet Numbers ("ARIN"). |
@@ -649,7 +649,8 @@ ASIdentifierChoice_canonize(ASIdentifierChoice *choice) | |||
649 | /* | 649 | /* |
650 | * Make sure we're properly sorted (paranoia). | 650 | * Make sure we're properly sorted (paranoia). |
651 | */ | 651 | */ |
652 | OPENSSL_assert(ASN1_INTEGER_cmp(a_min, b_min) <= 0); | 652 | if (ASN1_INTEGER_cmp(a_min, b_min) > 0) |
653 | goto done; | ||
653 | 654 | ||
654 | /* | 655 | /* |
655 | * Punt inverted ranges. | 656 | * Punt inverted ranges. |
@@ -736,7 +737,8 @@ ASIdentifierChoice_canonize(ASIdentifierChoice *choice) | |||
736 | } | 737 | } |
737 | 738 | ||
738 | /* Paranoia */ | 739 | /* Paranoia */ |
739 | OPENSSL_assert(ASIdentifierChoice_is_canonical(choice)); | 740 | if (!ASIdentifierChoice_is_canonical(choice)) |
741 | goto done; | ||
740 | 742 | ||
741 | ret = 1; | 743 | ret = 1; |
742 | 744 | ||
@@ -977,16 +979,22 @@ X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b) | |||
977 | * Core code for RFC 3779 3.3 path validation. | 979 | * Core code for RFC 3779 3.3 path validation. |
978 | */ | 980 | */ |
979 | static int | 981 | static int |
980 | asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain, | 982 | asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509) *chain, |
981 | ASIdentifiers *ext) | 983 | ASIdentifiers *ext) |
982 | { | 984 | { |
983 | ASIdOrRanges *child_as = NULL, *child_rdi = NULL; | 985 | ASIdOrRanges *child_as = NULL, *child_rdi = NULL; |
984 | int i, ret = 1, inherit_as = 0, inherit_rdi = 0; | 986 | int i, ret = 1, inherit_as = 0, inherit_rdi = 0; |
985 | X509 *x; | 987 | X509 *x; |
986 | 988 | ||
987 | OPENSSL_assert(chain != NULL && sk_X509_num(chain) > 0); | 989 | /* We need a non-empty chain to test against. */ |
988 | OPENSSL_assert(ctx != NULL || ext != NULL); | 990 | if (sk_X509_num(chain) <= 0) |
989 | OPENSSL_assert(ctx == NULL || ctx->verify_cb != NULL); | 991 | goto err; |
992 | /* We need either a store ctx or an extension to work with. */ | ||
993 | if (ctx == NULL && ext == NULL) | ||
994 | goto err; | ||
995 | /* If there is a store ctx, it needs a verify_cb. */ | ||
996 | if (ctx != NULL && ctx->verify_cb == NULL) | ||
997 | goto err; | ||
990 | 998 | ||
991 | /* | 999 | /* |
992 | * Figure out where to start. If we don't have an extension to | 1000 | * Figure out where to start. If we don't have an extension to |
@@ -1031,7 +1039,6 @@ asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain, | |||
1031 | */ | 1039 | */ |
1032 | for (i++; i < sk_X509_num(chain); i++) { | 1040 | for (i++; i < sk_X509_num(chain); i++) { |
1033 | x = sk_X509_value(chain, i); | 1041 | x = sk_X509_value(chain, i); |
1034 | OPENSSL_assert(x != NULL); | ||
1035 | 1042 | ||
1036 | if (x->rfc3779_asid == NULL) { | 1043 | if (x->rfc3779_asid == NULL) { |
1037 | if (child_as != NULL || child_rdi != NULL) | 1044 | if (child_as != NULL || child_rdi != NULL) |
@@ -1078,7 +1085,9 @@ asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain, | |||
1078 | /* | 1085 | /* |
1079 | * Trust anchor can't inherit. | 1086 | * Trust anchor can't inherit. |
1080 | */ | 1087 | */ |
1081 | OPENSSL_assert(x != NULL); | 1088 | |
1089 | if (x == NULL) | ||
1090 | goto err; | ||
1082 | 1091 | ||
1083 | if (x->rfc3779_asid != NULL) { | 1092 | if (x->rfc3779_asid != NULL) { |
1084 | if (x->rfc3779_asid->asnum != NULL && | 1093 | if (x->rfc3779_asid->asnum != NULL && |
@@ -1091,6 +1100,12 @@ asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain, | |||
1091 | 1100 | ||
1092 | done: | 1101 | done: |
1093 | return ret; | 1102 | return ret; |
1103 | |||
1104 | err: | ||
1105 | if (ctx != NULL) | ||
1106 | ctx->error = X509_V_ERR_UNSPECIFIED; | ||
1107 | |||
1108 | return 0; | ||
1094 | } | 1109 | } |
1095 | 1110 | ||
1096 | #undef validation_err | 1111 | #undef validation_err |
@@ -1101,9 +1116,7 @@ asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain, | |||
1101 | int | 1116 | int |
1102 | X509v3_asid_validate_path(X509_STORE_CTX *ctx) | 1117 | X509v3_asid_validate_path(X509_STORE_CTX *ctx) |
1103 | { | 1118 | { |
1104 | if (ctx->chain == NULL || | 1119 | if (sk_X509_num(ctx->chain) <= 0 || ctx->verify_cb == NULL) { |
1105 | sk_X509_num(ctx->chain) == 0 || | ||
1106 | ctx->verify_cb == NULL) { | ||
1107 | ctx->error = X509_V_ERR_UNSPECIFIED; | 1120 | ctx->error = X509_V_ERR_UNSPECIFIED; |
1108 | return 0; | 1121 | return 0; |
1109 | } | 1122 | } |