summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2020-09-03 17:29:05 +0000
committertb <>2020-09-03 17:29:05 +0000
commit64aeb329634d544ed92d444ec7731ad7f75d04f1 (patch)
tree467b799d2c6a5c331b6463884029f4a27fba6ac3
parent4bf78c9d27fd63450872f4391ac1bd558c36d841 (diff)
downloadopenbsd-64aeb329634d544ed92d444ec7731ad7f75d04f1.tar.gz
openbsd-64aeb329634d544ed92d444ec7731ad7f75d04f1.tar.bz2
openbsd-64aeb329634d544ed92d444ec7731ad7f75d04f1.zip
Clean up asn1/x_info.c
Instead of using malloc(3) and manually setting part of the structure to zero, part to something else and leaving the rest uninitialized, we can benefit from the fact that there's this thing called calloc(3). Moreover, all variants of free(3) in libcrypto are NULL safe. ok beck inoguchi
-rw-r--r--src/lib/libcrypto/asn1/x_info.c31
1 files changed, 9 insertions, 22 deletions
diff --git a/src/lib/libcrypto/asn1/x_info.c b/src/lib/libcrypto/asn1/x_info.c
index c476923158..9285e3e289 100644
--- a/src/lib/libcrypto/asn1/x_info.c
+++ b/src/lib/libcrypto/asn1/x_info.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x_info.c,v 1.17 2017/01/29 17:49:22 beck Exp $ */ 1/* $OpenBSD: x_info.c,v 1.18 2020/09/03 17:29:05 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -60,48 +60,35 @@
60 60
61#include <openssl/asn1.h> 61#include <openssl/asn1.h>
62#include <openssl/err.h> 62#include <openssl/err.h>
63#include <openssl/evp.h>
64#include <openssl/x509.h> 63#include <openssl/x509.h>
65 64
66X509_INFO * 65X509_INFO *
67X509_INFO_new(void) 66X509_INFO_new(void)
68{ 67{
69 X509_INFO *ret = NULL; 68 X509_INFO *ret;
70 69
71 ret = malloc(sizeof(X509_INFO)); 70 if ((ret = calloc(1, sizeof(X509_INFO))) == NULL) {
72 if (ret == NULL) {
73 ASN1error(ERR_R_MALLOC_FAILURE); 71 ASN1error(ERR_R_MALLOC_FAILURE);
74 return (NULL); 72 return (NULL);
75 } 73 }
76
77 ret->enc_cipher.cipher = NULL;
78 ret->enc_len = 0;
79 ret->enc_data = NULL;
80
81 ret->references = 1; 74 ret->references = 1;
82 ret->x509 = NULL; 75
83 ret->crl = NULL; 76 return ret;
84 ret->x_pkey = NULL;
85 return (ret);
86} 77}
87 78
88void 79void
89X509_INFO_free(X509_INFO *x) 80X509_INFO_free(X509_INFO *x)
90{ 81{
91 int i;
92
93 if (x == NULL) 82 if (x == NULL)
94 return; 83 return;
95 84
96 i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_INFO); 85 if (CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_INFO) > 0)
97 if (i > 0)
98 return; 86 return;
99 87
100 X509_free(x->x509); 88 X509_free(x->x509);
101 if (x->crl != NULL) 89 X509_CRL_free(x->crl);
102 X509_CRL_free(x->crl); 90 X509_PKEY_free(x->x_pkey);
103 if (x->x_pkey != NULL)
104 X509_PKEY_free(x->x_pkey);
105 free(x->enc_data); 91 free(x->enc_data);
92
106 free(x); 93 free(x);
107} 94}