aboutsummaryrefslogtreecommitdiffstats
path: root/src/genkey.c
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2023-11-14 12:48:48 +0000
committerIngo Klöcker <[email protected]>2023-11-14 12:51:24 +0000
commit77e982579ccadb20ee865337ada9579ac41164e1 (patch)
tree896d438e554e9c336b3474e440c5a823b0cff877 /src/genkey.c
parenttests: Add option --chain to run-keylist (diff)
downloadgpgme-77e982579ccadb20ee865337ada9579ac41164e1.tar.gz
gpgme-77e982579ccadb20ee865337ada9579ac41164e1.zip
core: Preserve more specific existing failure code
* src/decrypt.c (_gpgme_decrypt_status_handler): Ignore received failure code if we already have a specific failure code. * src/encrypt.c (_gpgme_encrypt_status_handler): Ditto. * src/export.c (export_status_handler): Ditto. * src/genkey.c (genkey_status_handler): Ditto. * src/keylist.c (keylist_status_handler): Ditto. * src/keysign.c (keysign_status_handler): Ditto. * src/passwd.c (passwd_status_handler): Ditto. * src/revsig.c (revsig_status_handler): Ditto. * src/setexpire.c (setexpire_status_handler): Ditto. * src/sign.c (_gpgme_sign_status_handler): Ditto. * src/tofupolicy.c (tofu_policy_status_handler): Ditto. * src/verify.c (_gpgme_verify_status_handler): Ditto. -- Usually, a process emits at most one failure code. But some operations like the creation of an encrypted archive involve multiple chained processes, so that multiple failure codes can be received. We want to keep the first specific failure code we received. Further failure codes are only parsed if we received just an unspecific "general error" so far. GnuPG-bug-id: 6575
Diffstat (limited to 'src/genkey.c')
-rw-r--r--src/genkey.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/genkey.c b/src/genkey.c
index 77576b18..89e1d985 100644
--- a/src/genkey.c
+++ b/src/genkey.c
@@ -172,7 +172,9 @@ genkey_status_handler (void *priv, gpgme_status_code_t code, char *args)
break;
case GPGME_STATUS_FAILURE:
- opd->failure_code = _gpgme_parse_failure (args);
+ if (!opd->failure_code
+ || gpg_err_code (opd->failure_code) == GPG_ERR_GENERAL)
+ opd->failure_code = _gpgme_parse_failure (args);
break;
case GPGME_STATUS_EOF: