aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2016-09-19 06:27:23 +0000
committerWerner Koch <[email protected]>2016-09-19 06:27:56 +0000
commit18bbefa27f9e47e1062ee4d7af09487632795ba7 (patch)
tree7e2b3985988bb9e02bd90e54b0ec803f02e0fbab
parentdoc: Clarify forward-compatible expectations (diff)
downloadgnupg-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.c27
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)