diff options
author | Werner Koch <[email protected]> | 2016-09-19 06:27:23 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2016-09-19 06:27:56 +0000 |
commit | 18bbefa27f9e47e1062ee4d7af09487632795ba7 (patch) | |
tree | 7e2b3985988bb9e02bd90e54b0ec803f02e0fbab | |
parent | doc: Clarify forward-compatible expectations (diff) | |
download | gnupg-18bbefa27f9e47e1062ee4d7af09487632795ba7.tar.gz gnupg-18bbefa27f9e47e1062ee4d7af09487632795ba7.zip |
gpg: Avoid malloc failure due to no key signatures
* g10/keyedit.c (check_all_keysigs): Check early for no key
signatures. Use xtrycalloc.
--
GnuPG-bug-id: 2690
Signed-off-by: Werner Koch <[email protected]>
-rw-r--r-- | g10/keyedit.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/g10/keyedit.c b/g10/keyedit.c index 87e69b0bd..cd16ec971 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -408,20 +408,31 @@ check_all_keysigs (KBNODE kb, int only_selected, int only_selfsigs) /* First we look for duplicates. */ { - int nsigs = 0; - KBNODE *sigs; + int nsigs; + kbnode_t *sigs; int i; int last_i; /* Count the sigs. */ - for (n = kb; n; n = n->next) - if (is_deleted_kbnode (n)) - continue; - else if (n->pkt->pkttype == PKT_SIGNATURE) - nsigs ++; + for (nsigs = 0, n = kb; n; n = n->next) + { + if (is_deleted_kbnode (n)) + continue; + else if (n->pkt->pkttype == PKT_SIGNATURE) + nsigs ++; + } + + if (!nsigs) + return 0; /* No signatures at all. */ /* Add them all to the SIGS array. */ - sigs = xmalloc_clear (sizeof (*sigs) * nsigs); + sigs = xtrycalloc (nsigs, sizeof *sigs); + if (!sigs) + { + log_error (_("error allocating memory: %s\n"), + gpg_strerror (gpg_error_from_syserror ())); + return 0; + } i = 0; for (n = kb; n; n = n->next) |