diff options
author | Werner Koch <wk@gnupg.org> | 2017-02-10 17:16:07 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2017-02-10 17:58:26 +0100 |
commit | 5996c7bf99f3a681393fd9589276399ebc956cff (patch) | |
tree | 57a04b9d2eb7745e8d49c3e0597cd79c10e4ea31 /g10/sign.c | |
parent | common: Avoid warning about implicit declaration of gnupg_fd_valid. (diff) | |
download | gnupg2-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.c | 11 |
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; } |