From 3dc39add6af15bbe5a55f73e125558181669baf0 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 16 Dec 2022 15:24:33 +0100 Subject: [PATCH] gpg: Do not continue the export after a cancel for the primary key. * g10/export.c (do_export_one_keyblock): Handle a cancel for the primary key special. -- GnuPG-bug-id: 6093 (cherry picked from commit 49d16f4f6edf872babf04ae383974d891871a33b) --- g10/export.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/g10/export.c b/g10/export.c index ddd94cf05..398b1302c 100644 --- a/g10/export.c +++ b/g10/export.c @@ -1827,7 +1827,16 @@ do_export_one_keyblock (ctrl_t ctrl, kbnode_t keyblock, u32 *keyid, hexgrip, pk); if (err) { - if (gpg_err_code (err) == GPG_ERR_FULLY_CANCELED) + /* If we receive a fully canceled error we stop + * immediately. If we receive a cancel for a public + * key we also stop immediately because a + * public/secret key is always required first + * (right, we could instead write a stub key but + * that is also kind of surprising). If we receive + * a subkey we skip to the next subkey. */ + if (gpg_err_code (err) == GPG_ERR_FULLY_CANCELED + || (node->pkt->pkttype == PKT_PUBLIC_KEY + && gpg_err_code (err) == GPG_ERR_CANCELED)) goto leave; write_status_error ("export_keys.secret", err); skip_until_subkey = 1;