diff options
author | tb <> | 2024-10-27 09:54:01 +0000 |
---|---|---|
committer | tb <> | 2024-10-27 09:54:01 +0000 |
commit | 5c0a7393a13f82cf55eac6c76ffd5ea707360fe4 (patch) | |
tree | 21cbdd6f789a6ddf2df95406f3502f8c9f1f6b21 /src | |
parent | a8f715df0e33ec622660acd6a4e2cd8ffb1921fa (diff) | |
download | openbsd-5c0a7393a13f82cf55eac6c76ffd5ea707360fe4.tar.gz openbsd-5c0a7393a13f82cf55eac6c76ffd5ea707360fe4.tar.bz2 openbsd-5c0a7393a13f82cf55eac6c76ffd5ea707360fe4.zip |
d2i_ECParameters: clean up entry and exit
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/ec/ec_asn1.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/lib/libcrypto/ec/ec_asn1.c b/src/lib/libcrypto/ec/ec_asn1.c index 7cfd4bdee6..4e70995025 100644 --- a/src/lib/libcrypto/ec/ec_asn1.c +++ b/src/lib/libcrypto/ec/ec_asn1.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ec_asn1.c,v 1.86 2024/10/27 09:40:09 tb Exp $ */ | 1 | /* $OpenBSD: ec_asn1.c,v 1.87 2024/10/27 09:54:01 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Written by Nils Larsch for the OpenSSL project. | 3 | * Written by Nils Larsch for the OpenSSL project. |
4 | */ | 4 | */ |
@@ -1283,30 +1283,34 @@ LCRYPTO_ALIAS(i2d_ECParameters); | |||
1283 | EC_KEY * | 1283 | EC_KEY * |
1284 | d2i_ECParameters(EC_KEY **out_ec_key, const unsigned char **in, long len) | 1284 | d2i_ECParameters(EC_KEY **out_ec_key, const unsigned char **in, long len) |
1285 | { | 1285 | { |
1286 | EC_KEY *ec_key; | 1286 | EC_KEY *ec_key = NULL; |
1287 | 1287 | ||
1288 | if (in == NULL || *in == NULL) { | 1288 | if (in == NULL || *in == NULL) { |
1289 | ECerror(ERR_R_PASSED_NULL_PARAMETER); | 1289 | ECerror(ERR_R_PASSED_NULL_PARAMETER); |
1290 | return NULL; | 1290 | goto err; |
1291 | } | ||
1292 | if (out_ec_key == NULL || (ec_key = *out_ec_key) == NULL) | ||
1293 | ec_key = EC_KEY_new(); | ||
1294 | if (ec_key == NULL) { | ||
1295 | ECerror(ERR_R_MALLOC_FAILURE); | ||
1296 | goto err; | ||
1291 | } | 1297 | } |
1292 | if (out_ec_key == NULL || *out_ec_key == NULL) { | ||
1293 | if ((ec_key = EC_KEY_new()) == NULL) { | ||
1294 | ECerror(ERR_R_MALLOC_FAILURE); | ||
1295 | return NULL; | ||
1296 | } | ||
1297 | } else | ||
1298 | ec_key = *out_ec_key; | ||
1299 | 1298 | ||
1300 | if (!d2i_ECPKParameters(&ec_key->group, in, len)) { | 1299 | if (!d2i_ECPKParameters(&ec_key->group, in, len)) { |
1301 | ECerror(ERR_R_EC_LIB); | 1300 | ECerror(ERR_R_EC_LIB); |
1302 | if (out_ec_key == NULL || *out_ec_key != ec_key) | 1301 | goto err; |
1303 | EC_KEY_free(ec_key); | ||
1304 | return NULL; | ||
1305 | } | 1302 | } |
1306 | 1303 | ||
1307 | if (out_ec_key != NULL) | 1304 | if (out_ec_key != NULL) |
1308 | *out_ec_key = ec_key; | 1305 | *out_ec_key = ec_key; |
1306 | |||
1309 | return ec_key; | 1307 | return ec_key; |
1308 | |||
1309 | err: | ||
1310 | if (out_ec_key == NULL || *out_ec_key != ec_key) | ||
1311 | EC_KEY_free(ec_key); | ||
1312 | |||
1313 | return NULL; | ||
1310 | } | 1314 | } |
1311 | LCRYPTO_ALIAS(d2i_ECParameters); | 1315 | LCRYPTO_ALIAS(d2i_ECParameters); |
1312 | 1316 | ||