From 18bbefa27f9e47e1062ee4d7af09487632795ba7 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 19 Sep 2016 08:27:23 +0200 Subject: [PATCH] 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 --- g10/keyedit.c | 27 +++++++++++++++++++-------- 1 file 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)