aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine-gpgsm.c
diff options
context:
space:
mode:
authorAndre Heinecke <[email protected]>2018-10-29 15:11:22 +0000
committerAndre Heinecke <[email protected]>2018-10-29 15:11:22 +0000
commit8f27511862cabac8fa1dd8f883cb78faebc05ef6 (patch)
tree66dac3bf23b34f6d3e98e21e9c3e9935f39aa583 /src/engine-gpgsm.c
parentcpp,tests: Add another test runner (diff)
downloadgpgme-8f27511862cabac8fa1dd8f883cb78faebc05ef6.tar.gz
gpgme-8f27511862cabac8fa1dd8f883cb78faebc05ef6.zip
core: Do not crash if CMS plaintext is ignored
* src/engine-gpgsm.c (gpgsm_verify): Fix handling both plaintext and signed_text as NULL. -- Previously if plaintext was NULL and signed_text was NULL it would set MESSAGE_FD to NULL which resulted in a crash. Ignoring the plaintext of an opaque signature might make sense in some cases and engine-gpg handles it.
Diffstat (limited to 'src/engine-gpgsm.c')
-rw-r--r--src/engine-gpgsm.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c
index 3266e360..6e6df469 100644
--- a/src/engine-gpgsm.c
+++ b/src/engine-gpgsm.c
@@ -2030,11 +2030,19 @@ gpgsm_verify (void *engine, gpgme_data_t sig, gpgme_data_t signed_text,
err = gpgsm_set_fd (gpgsm, INPUT_FD, map_data_enc (gpgsm->input_cb.data));
if (err)
return err;
- if (plaintext)
+ if (!signed_text)
{
/* Normal or cleartext signature. */
- gpgsm->output_cb.data = plaintext;
- err = gpgsm_set_fd (gpgsm, OUTPUT_FD, 0);
+ if (plaintext)
+ {
+ gpgsm->output_cb.data = plaintext;
+ err = gpgsm_set_fd (gpgsm, OUTPUT_FD, 0);
+ }
+ else
+ {
+ /* No output requested. */
+ gpgsm_clear_fd (gpgsm, OUTPUT_FD);
+ }
gpgsm_clear_fd (gpgsm, MESSAGE_FD);
}
else