]> granicus.if.org Git - mutt/commitdiff
Fix s/mime non-detached signature handling.
authorKevin McCarthy <kevin@8t8.us>
Thu, 22 Mar 2018 16:32:31 +0000 (09:32 -0700)
committerKevin McCarthy <kevin@8t8.us>
Thu, 22 Mar 2018 16:32:31 +0000 (09:32 -0700)
This fix is based on stbuehler's patch from
https://dev.gnupg.org/T2919.

Recent versions of gpgme seem to terminate the connection for a
protocol error.  stbuehler's analysis is that this is actually a
gpgme bug, but recreating the context works around the problem.

crypt-gpgme.c

index 7283e1095e3d636ceaa6d121e797cdd89db05dda..03cf7f0d3e7d6340e0a3cf1c43249882a5506e05 100644 (file)
@@ -1685,9 +1685,9 @@ static BODY *decrypt_part (BODY *a, STATE *s, FILE *fpout, int is_smime,
   if (r_is_signed)
     *r_is_signed = 0;
 
+restart:
   ctx = create_gpgme_context (is_smime);
 
- restart:
   /* Make a data object from the body, create context etc. */
   ciphertext = file_to_data_object (s->fpin, a->offset, a->length);
   if (!ciphertext)
@@ -1730,6 +1730,9 @@ static BODY *decrypt_part (BODY *a, STATE *s, FILE *fpout, int is_smime,
             {
               maybe_signed = 1;
               gpgme_data_release (plaintext);
+              /* We release the context because recent versions of gpgme+gpgsm
+               * appear to end the session after an error */
+              gpgme_release (ctx);
               goto restart;
             }
         }