summaryrefslogtreecommitdiffstats
path: root/g10
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2024-10-01 03:55:11 +0200
committerNIIBE Yutaka <gniibe@fsij.org>2024-10-01 03:55:11 +0200
commite7891225788ab5f6d050a06643b1f488c227771f (patch)
tree3149bc1cb795edd1b48c9927c0598f4df916663c /g10
parentgpgsm: Silence messages about dirmngr cache lookup failed. (diff)
downloadgnupg2-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.c18
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;
}