summaryrefslogtreecommitdiffstats
path: root/g10/sign.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2017-02-10 17:16:07 +0100
committerWerner Koch <wk@gnupg.org>2017-02-10 17:58:26 +0100
commit5996c7bf99f3a681393fd9589276399ebc956cff (patch)
tree57a04b9d2eb7745e8d49c3e0597cd79c10e4ea31 /g10/sign.c
parentcommon: Avoid warning about implicit declaration of gnupg_fd_valid. (diff)
downloadgnupg2-5996c7bf99f3a681393fd9589276399ebc956cff.tar.xz
gnupg2-5996c7bf99f3a681393fd9589276399ebc956cff.zip
gpg: Fix memory leak in the error case of signature creation.
* g10/sign.c (write_signature_packets): Free SIG. Also replace xcalloc by xtrycalloc. -- If do_sign fails SIG was not released. Note that in the good case SIG is transferred to PKT and freed by free_packet. Reported-by: Stephan Müller Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to '')
-rw-r--r--g10/sign.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/g10/sign.c b/g10/sign.c
index acc894c49..ff099b31c 100644
--- a/g10/sign.c
+++ b/g10/sign.c
@@ -686,7 +686,10 @@ write_signature_packets (SK_LIST sk_list, IOBUF out, gcry_md_hd_t hash,
pk = sk_rover->pk;
/* Build the signature packet. */
- sig = xmalloc_clear (sizeof *sig);
+ sig = xtrycalloc (1, sizeof *sig);
+ if (!sig)
+ return gpg_error_from_syserror ();
+
if (duration || opt.sig_policy_url
|| opt.sig_notations || opt.sig_keyserver_url)
sig->version = 4;
@@ -731,8 +734,12 @@ write_signature_packets (SK_LIST sk_list, IOBUF out, gcry_md_hd_t hash,
print_status_sig_created (pk, sig, status_letter);
free_packet (&pkt);
if (rc)
- log_error ("build signature packet failed: %s\n", gpg_strerror (rc));
+ log_error ("build signature packet failed: %s\n",
+ gpg_strerror (rc));
}
+ else
+ xfree (sig);
+
if (rc)
return rc;
}