diff options
Diffstat (limited to 'src/crypto/x509/x_info.c')
-rw-r--r-- | src/crypto/x509/x_info.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/crypto/x509/x_info.c b/src/crypto/x509/x_info.c index f9e9ab8..6807b24 100644 --- a/src/crypto/x509/x_info.c +++ b/src/crypto/x509/x_info.c @@ -77,6 +77,7 @@ X509_INFO *X509_INFO_new(void) ret->enc_len=0; ret->enc_data=NULL; + ret->references=1; ret->x509=NULL; ret->crl=NULL; ret->x_pkey=NULL; @@ -85,8 +86,23 @@ X509_INFO *X509_INFO_new(void) void X509_INFO_free(X509_INFO *x) { + int i; + if (x == NULL) return; + i=CRYPTO_add(&x->references,-1,CRYPTO_LOCK_X509_INFO); +#ifdef REF_PRINT + REF_PRINT("X509_INFO",x); +#endif + if (i > 0) return; +#ifdef REF_CHECK + if (i < 0) + { + fprintf(stderr,"X509_INFO_free, bad reference count\n"); + abort(); + } +#endif + if (x->x509 != NULL) X509_free(x->x509); if (x->crl != NULL) X509_CRL_free(x->crl); if (x->x_pkey != NULL) X509_PKEY_free(x->x_pkey); |