diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2024-10-01 03:55:11 +0200 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2024-10-01 03:55:11 +0200 |
commit | e7891225788ab5f6d050a06643b1f488c227771f (patch) | |
tree | 3149bc1cb795edd1b48c9927c0598f4df916663c /g10 | |
parent | gpgsm: Silence messages about dirmngr cache lookup failed. (diff) | |
download | gnupg2-e7891225788ab5f6d050a06643b1f488c227771f.tar.xz gnupg2-e7891225788ab5f6d050a06643b1f488c227771f.zip |
gpg: Robust error handling for SCD READKEY.
* g10/keygen.c (ask_algo): List the card key only when it's valid.
--
GnuPG-bug-id: 7309
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
Diffstat (limited to 'g10')
-rw-r--r-- | g10/keygen.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/g10/keygen.c b/g10/keygen.c index b39836cd0..453301fac 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -2779,12 +2779,14 @@ ask_algo (ctrl_t ctrl, int addmode, int *r_subkey_algo, unsigned int *r_usage, const char *keyref = kpi->idstr; int any = 0; - if (keyref - && !agent_scd_readkey (ctrl, keyref, &s_pkey, NULL)) - { - algostr = pubkey_algo_string (s_pkey, &algoid); - gcry_sexp_release (s_pkey); - } + if (!keyref) + continue; + + if (!agent_scd_readkey (ctrl, keyref, &s_pkey, NULL)) + continue; + + algostr = pubkey_algo_string (s_pkey, &algoid); + gcry_sexp_release (s_pkey); /* We need to tweak the algo in case GCRY_PK_ECC is * returned because pubkey_algo_string is not aware @@ -2857,9 +2859,9 @@ ask_algo (ctrl_t ctrl, int addmode, int *r_subkey_algo, unsigned int *r_usage, for (count=1,kpi=keypairlist; kpi; kpi = kpi->next, count++) if (count == selection) break; - if (!kpi) + if (!kpi || !kpi->algo) { - /* Just in case COUNT is zero (no keys). */ + /* Just in case no good key. */ free_keypair_info (keypairlist); goto ask_again; } |