X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=openssl.c;h=d11b1049d2a321905ab79ce2af6c1e86fe7b7991;hp=7d5bb25d53cf73009803fe0e62ca15d0167a05cb;hb=d6b25bf854c164021550dfa8ff9fb4cfb104582e;hpb=f787a626b8885247948e3c47ae886b1e3a7c2a3a diff --git a/openssl.c b/openssl.c index 7d5bb25d..d11b1049 100644 --- a/openssl.c +++ b/openssl.c @@ -57,7 +57,9 @@ void crypt_init(void) void crypt_shutdown(void) { +#ifdef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA CRYPTO_cleanup_all_ex_data(); +#endif } static int get_private_key(const char *path, RSA **rsa) @@ -124,11 +126,11 @@ static int read_rsa_bignums(const unsigned char *blob, int blen, RSA **result) return -E_BIGNUM; ret = read_bignum(p, end - p, &e); if (ret < 0) - goto fail; + goto free_rsa; p += ret; ret = read_bignum(p, end - p, &n); if (ret < 0) - goto fail; + goto free_e; #ifdef HAVE_RSA_SET0_KEY RSA_set0_key(rsa, n, e, NULL); #else @@ -137,7 +139,9 @@ static int read_rsa_bignums(const unsigned char *blob, int blen, RSA **result) #endif *result = rsa; return 1; -fail: +free_e: + BN_free(e); +free_rsa: RSA_free(rsa); return ret; }