]> granicus.if.org Git - mutt/commitdiff
Fix pgp_application_pgp_handler to remove all tempfiles.
authorKevin McCarthy <kevin@8t8.us>
Thu, 5 Mar 2015 03:24:31 +0000 (19:24 -0800)
committerKevin McCarthy <kevin@8t8.us>
Thu, 5 Mar 2015 03:24:31 +0000 (19:24 -0800)
If multiple PGP blocks are present in an email, Mutt only cleans up the
tempfiles for the last block.  Thanks to Dennis Preiser for the patch
and sample mbox file demonstrating the problem.

This patch also fixes the argument to mutt_perror for the pgpout
tempfile.

pgp.c

diff --git a/pgp.c b/pgp.c
index ee9751f024270dd6d645d4698c283fe08a7f17a5..6550777154a6393a6fc09b2cf857a8ac466dce40 100644 (file)
--- a/pgp.c
+++ b/pgp.c
@@ -373,7 +373,7 @@ int pgp_application_pgp_handler (BODY *m, STATE *s)
        mutt_mktemp (outfile, sizeof (outfile));
        if ((pgpout = safe_fopen (outfile, "w+")) == NULL)
        {
-         mutt_perror (tmpfname);
+         mutt_perror (outfile);
          return -1;
        }
        
@@ -485,6 +485,18 @@ int pgp_application_pgp_handler (BODY *m, STATE *s)
        fgetconv_close (&fc);
       }
 
+      /*
+       * Multiple PGP blocks can exist, so these need to be closed and
+       * unlinked inside the loop.
+       */
+      safe_fclose (&tmpfp);
+      mutt_unlink (tmpfname);
+      if (pgpout)
+      {
+       safe_fclose (&pgpout);
+       mutt_unlink (outfile);
+      }
+
       if (s->flags & M_DISPLAY)
       {
        state_putc ('\n', s);