aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2023-02-08 13:44:38 +0000
committerIngo Klöcker <[email protected]>2023-02-10 08:54:03 +0000
commit41dc3bd22a3e0001abec8f2bea79b40ee5ad00be (patch)
tree95bf13b97712f8acf074f28d8daf62a96415933a /src
parentcpp: Improve debug output of some enums (diff)
downloadgpgme-41dc3bd22a3e0001abec8f2bea79b40ee5ad00be.tar.gz
gpgme-41dc3bd22a3e0001abec8f2bea79b40ee5ad00be.zip
core: Allow finalization of signature verification of unencrypted data
* src/decrypt-verify.c (decrypt_verify_status_handler): Call _gpgme_verify_status_handler on EOF even if _gpgme_decrypt_status_handler returned NO DATA error. * tests/gpg/t-decrypt-verify.c (normal_signed_message): New. (main): Add test with signed, but not encrypted data. -- This allows the verify status handler to finalize the verification of the last signature even if the decrypt status handler returned a NO DATA error because the input data wasn't encrypted. GnuPG-bug-id: 6368
Diffstat (limited to 'src')
-rw-r--r--src/decrypt-verify.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/decrypt-verify.c b/src/decrypt-verify.c
index b63318f2..3ff15feb 100644
--- a/src/decrypt-verify.c
+++ b/src/decrypt-verify.c
@@ -35,13 +35,17 @@ decrypt_verify_status_handler (void *priv, gpgme_status_code_t code,
char *args)
{
gpgme_error_t err;
+ gpgme_error_t err2;
err = _gpgme_progress_status_handler (priv, code, args);
if (!err)
err = _gpgme_decrypt_status_handler (priv, code, args);
- if (!err)
- err = _gpgme_verify_status_handler (priv, code, args);
- return err;
+ /* Allow finalization of signature verification even if previous handler
+ * returned NO DATA error which just means that the data wasn't encrypted. */
+ if (!err
+ || (code == GPGME_STATUS_EOF && gpg_err_code (err) == GPG_ERR_NO_DATA))
+ err2 = _gpgme_verify_status_handler (priv, code, args);
+ return err ? err : err2;
}