aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2019-02-07 15:28:03 +0000
committerWerner Koch <[email protected]>2019-02-07 15:28:03 +0000
commitdf6ba6dfd235fddb7645bc16573da1a6a7e6b49d (patch)
tree7dbba1063aabe8e99539a476a0a6342b20c3ec8d
parentscd: Store a new PIV public key in the certificate DO. (diff)
downloadgnupg-df6ba6dfd235fddb7645bc16573da1a6a7e6b49d.tar.gz
gnupg-df6ba6dfd235fddb7645bc16573da1a6a7e6b49d.zip
card: Fix a NULL-ptr deref in key listings.
* tools/card-tool-keys.c (get_matching_keys): Fix segv. * tools/gpg-card-tool.c (main): Init info. Signed-off-by: Werner Koch <[email protected]>
-rw-r--r--tools/card-tool-keys.c9
-rw-r--r--tools/gpg-card-tool.c4
2 files changed, 8 insertions, 5 deletions
diff --git a/tools/card-tool-keys.c b/tools/card-tool-keys.c
index e9edf9818..4e057ad94 100644
--- a/tools/card-tool-keys.c
+++ b/tools/card-tool-keys.c
@@ -214,9 +214,12 @@ get_matching_keys (const unsigned char *keygrip, int protocol,
err = get_matching_keys (keygrip, GNUPG_PROTOCOL_OPENPGP, &kb);
if (!err || gpg_err_code (err) == GPG_ERR_NO_PUBKEY)
{
- *keyblock_tail = kb;
- keyblock_tail = &kb->next;
- kb = NULL;
+ if (!err)
+ {
+ *keyblock_tail = kb;
+ keyblock_tail = &kb->next;
+ kb = NULL;
+ }
err = get_matching_keys (keygrip, GNUPG_PROTOCOL_CMS, &kb);
if (!err)
{
diff --git a/tools/gpg-card-tool.c b/tools/gpg-card-tool.c
index 917013247..0dbf2b224 100644
--- a/tools/gpg-card-tool.c
+++ b/tools/gpg-card-tool.c
@@ -309,7 +309,7 @@ main (int argc, char **argv)
}
else
{
- struct card_info_s info_buffer;
+ struct card_info_s info_buffer = { 0 };
card_info_t info = &info_buffer;
err = 0;
@@ -2968,7 +2968,7 @@ interactive_loop (void)
int redisplay = 1; /* Whether to redisplay the main info. */
int allow_admin = 0; /* Whether admin commands are allowed. */
char *help_arg = NULL; /* Argument of the HELP command. */
- struct card_info_s info_buffer;
+ struct card_info_s info_buffer = { 0 };
card_info_t info = &info_buffer;
char *p;
int i;