summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2024-10-27 09:54:01 +0000
committertb <>2024-10-27 09:54:01 +0000
commit5c0a7393a13f82cf55eac6c76ffd5ea707360fe4 (patch)
tree21cbdd6f789a6ddf2df95406f3502f8c9f1f6b21 /src
parenta8f715df0e33ec622660acd6a4e2cd8ffb1921fa (diff)
downloadopenbsd-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.c30
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);
1283EC_KEY * 1283EC_KEY *
1284d2i_ECParameters(EC_KEY **out_ec_key, const unsigned char **in, long len) 1284d2i_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}
1311LCRYPTO_ALIAS(d2i_ECParameters); 1315LCRYPTO_ALIAS(d2i_ECParameters);
1312 1316