]> granicus.if.org Git - mutt/commitdiff
Void passphrase on s/mime decryption error.
authorKevin McCarthy <kevin@8t8.us>
Mon, 2 Jul 2018 03:13:11 +0000 (20:13 -0700)
committerKevin McCarthy <kevin@8t8.us>
Mon, 2 Jul 2018 03:31:26 +0000 (20:31 -0700)
Model this after pgp's pgp_decrypt_part(), which checks if fpout is
empty.

smime.c

diff --git a/smime.c b/smime.c
index 13a3e2ccec3e66fb8d2c581baa422ae5771bcd3e..e96daec7149cbb2543dbd49735c0f2711920936b 100644 (file)
--- a/smime.c
+++ b/smime.c
@@ -1930,6 +1930,17 @@ static BODY *smime_handle_entity (BODY *m, STATE *s, FILE *outFile)
   {
     fflush (smimeout);
     rewind (smimeout);
+
+    if (type & ENCRYPT)
+    {
+      /* void the passphrase, even if that wasn't the problem */
+      if (fgetc (smimeout) == EOF)
+      {
+        mutt_error _("Decryption failed");
+        smime_void_passphrase ();
+      }
+      rewind (smimeout);
+    }
     
     if (outFile) fpout = outFile;
     else
@@ -1955,7 +1966,6 @@ static BODY *smime_handle_entity (BODY *m, STATE *s, FILE *outFile)
     fflush (fpout);
     rewind (fpout); 
 
-
     if ((p = mutt_read_mime_header (fpout, 0)) != NULL)
     {
       fstat (fileno (fpout), &info);
@@ -1972,6 +1982,7 @@ static BODY *smime_handle_entity (BODY *m, STATE *s, FILE *outFile)
       }
       
     }
+
     safe_fclose (&smimeout);
     smimeout = NULL;
     mutt_unlink (outfile);