diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2016-02-28 12:12:09 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2016-02-28 12:12:09 +0100 |
commit | 3bd37a4239769460c42f43ae932f304dd5132576 (patch) | |
tree | 50ce466a5557f5485aaac2dd52fe89920972a6c9 /src/pkcs11.c | |
parent | 4156885beac91ac45fc5853a8d034d0b7daab0c0 (diff) | |
download | gnutls-3bd37a4239769460c42f43ae932f304dd5132576.tar.gz |
p11tool: addressed memory leaks
Diffstat (limited to 'src/pkcs11.c')
-rw-r--r-- | src/pkcs11.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/pkcs11.c b/src/pkcs11.c index e0ede4f56e..59d5fb3920 100644 --- a/src/pkcs11.c +++ b/src/pkcs11.c @@ -40,6 +40,7 @@ static char *get_single_token_url(common_info_st * info); +static char *_saved_url = NULL; #define FIX(url, out, det, info) \ if (url == NULL) { \ @@ -49,8 +50,11 @@ char *get_single_token_url(common_info_st * info); pkcs11_token_list(out, det, info, 1); \ exit(1); \ } \ + _saved_url = (void*)url; \ } +#define UNFIX gnutls_free(_saved_url);_saved_url = NULL + #define CHECK_LOGIN_FLAG(flag) \ if (flag == 0) \ fprintf(stderr, \ @@ -236,6 +240,7 @@ pkcs11_list(FILE * outfile, const char *url, int type, unsigned int flags, fprintf(outfile, "\n"); } + UNFIX; return; } @@ -338,6 +343,7 @@ pkcs11_test_sign(FILE * outfile, const char *url, unsigned int flags, gnutls_free(sig.data); gnutls_pubkey_deinit(pubkey); gnutls_privkey_deinit(privkey); + UNFIX; } void @@ -382,6 +388,7 @@ pkcs11_export(FILE * outfile, const char *url, unsigned int flags, gnutls_pkcs11_obj_deinit(obj); + UNFIX; return; } @@ -479,6 +486,7 @@ pkcs11_export_chain(FILE * outfile, const char *url, unsigned int flags, } while(1); + UNFIX; return; } @@ -498,8 +506,8 @@ char *get_single_token_url(common_info_st * info) ret = gnutls_pkcs11_token_get_url(1, 0, &t); if (ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { - gnutls_free(url); gnutls_free(t); + gnutls_free(url); return NULL; } @@ -698,6 +706,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label, } gnutls_x509_crt_get_key_usage(xcrt, &key_usage, NULL); + gnutls_x509_crt_deinit(xcrt); } xkey = load_x509_private_key(0, info); @@ -712,6 +721,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label, __LINE__, gnutls_strerror(ret)); exit(1); } + gnutls_x509_privkey_deinit(xkey); } xpubkey = load_pubkey(0, info); @@ -725,6 +735,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label, __LINE__, gnutls_strerror(ret)); exit(1); } + gnutls_pubkey_deinit(xpubkey); } if (xkey == NULL && xcrt == NULL && secret_key == NULL && xpubkey == NULL) { @@ -733,6 +744,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label, exit(1); } + UNFIX; return; } @@ -789,6 +801,7 @@ pkcs11_generate(FILE * outfile, const char *url, gnutls_pk_algorithm_t pk, fwrite(pubkey.data, 1, pubkey.size, outfile); gnutls_free(pubkey.data); + UNFIX; return; } @@ -837,6 +850,7 @@ pkcs11_export_pubkey(FILE * outfile, const char *url, int detailed, unsigned int fwrite(pubkey.data, 1, pubkey.size, outfile); gnutls_free(pubkey.data); + UNFIX; return; } |