From 7e2d52e38fd084c0ae1e8f666ba42a98e2e364e5 Mon Sep 17 00:00:00 2001 From: Damien Stuart Date: Sat, 18 Apr 2009 13:36:21 +0000 Subject: [PATCH] Fixed double-free when destroy was called after a failed gpg encryption/decryption. git-svn-id: file:///home/mbr/svn/fwknop/trunk@80 510a4753-2344-4c79-9c09-4d669213fbeb --- fko/gpgme_funcs.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fko/gpgme_funcs.c b/fko/gpgme_funcs.c index 12c517c4..01d7c184 100644 --- a/fko/gpgme_funcs.c +++ b/fko/gpgme_funcs.c @@ -228,7 +228,7 @@ gpgme_encrypt(fko_ctx_t fko_ctx, unsigned char *indata, size_t in_len, const cha if(gpg_err_code(err) != GPG_ERR_NO_ERROR) { gpgme_release(gpg_ctx); - + fko_ctx->gpg_ctx = NULL; fko_ctx->gpg_err = err; return(FKO_ERROR_GPGME_PLAINTEXT_DATA_OBJ); @@ -241,6 +241,7 @@ gpgme_encrypt(fko_ctx_t fko_ctx, unsigned char *indata, size_t in_len, const cha { gpgme_data_release(plaintext); gpgme_release(gpg_ctx); + fko_ctx->gpg_ctx = NULL; fko_ctx->gpg_err = err; @@ -264,6 +265,7 @@ gpgme_encrypt(fko_ctx_t fko_ctx, unsigned char *indata, size_t in_len, const cha { gpgme_data_release(plaintext); gpgme_release(gpg_ctx); + fko_ctx->gpg_ctx = NULL; fko_ctx->gpg_err = err; @@ -279,6 +281,7 @@ gpgme_encrypt(fko_ctx_t fko_ctx, unsigned char *indata, size_t in_len, const cha gpgme_data_release(plaintext); gpgme_data_release(cipher); gpgme_release(gpg_ctx); + fko_ctx->gpg_ctx = NULL; fko_ctx->gpg_err = err; @@ -299,6 +302,7 @@ gpgme_encrypt(fko_ctx_t fko_ctx, unsigned char *indata, size_t in_len, const cha gpgme_data_release(plaintext); gpgme_data_release(cipher); gpgme_release(gpg_ctx); + fko_ctx->gpg_ctx = NULL; fko_ctx->gpg_err = err; @@ -356,6 +360,7 @@ gpgme_decrypt(fko_ctx_t fko_ctx, unsigned char *indata, size_t in_len, const cha if(gpg_err_code(err) != GPG_ERR_NO_ERROR) { gpgme_release(gpg_ctx); + fko_ctx->gpg_ctx = NULL; fko_ctx->gpg_err = err; @@ -369,6 +374,7 @@ gpgme_decrypt(fko_ctx_t fko_ctx, unsigned char *indata, size_t in_len, const cha { gpgme_data_release(plaintext); gpgme_release(gpg_ctx); + fko_ctx->gpg_ctx = NULL; fko_ctx->gpg_err = err; @@ -387,6 +393,7 @@ gpgme_decrypt(fko_ctx_t fko_ctx, unsigned char *indata, size_t in_len, const cha gpgme_data_release(plaintext); gpgme_data_release(cipher); gpgme_release(gpg_ctx); + fko_ctx->gpg_ctx = NULL; fko_ctx->gpg_err = err;