]> granicus.if.org Git - neomutt/commitdiff
Fix s/mime certificate deletion bug
authorKevin McCarthy <kevin@8t8.us>
Fri, 15 Dec 2017 20:09:42 +0000 (12:09 -0800)
committerRichard Russon <rich@flatcap.org>
Thu, 28 Dec 2017 13:41:50 +0000 (13:41 +0000)
Commit c1bcf4ba exposed a bug in the s/mime encryption code.  It was
errorneously calling unlink on the list of generated cert files to
use.

Prior to that commit, the list had an initial space, which apparently
made the unlink fail.  After that commit, encrypting to a single
certificate would end up deleting the certificate.

Remove the calls to unlink the cert file.  Add some missing cleanup if
the call to openssl fails.

Fixes #1006

ncrypt/smime.c

index 5b47c5a51fcd85263b4124d9fea5576b1854a3f0..866e7fb9837e8cb4766af2703065a1b362380077 100644 (file)
@@ -1356,8 +1356,8 @@ struct Body *smime_build_smime_entity(struct Body *a, char *certlist)
   if (!smimeerr)
   {
     mutt_perror(smimeerrfile);
-    mutt_file_fclose(&fpout);
     mutt_file_unlink(tempfile);
+    mutt_file_fclose(&fpout);
     return NULL;
   }
   mutt_file_unlink(smimeerrfile);
@@ -1399,10 +1399,10 @@ struct Body *smime_build_smime_entity(struct Body *a, char *certlist)
                                 fileno(smimeerr), smimeinfile, certfile);
   if (thepid == -1)
   {
+    mutt_file_unlink(tempfile);
+    mutt_file_fclose(&fpout);
     mutt_file_fclose(&smimeerr);
     mutt_file_unlink(smimeinfile);
-    mutt_file_unlink(certfile);
-    mutt_file_fclose(&fpout);
     return NULL;
   }
 
@@ -1410,7 +1410,6 @@ struct Body *smime_build_smime_entity(struct Body *a, char *certlist)
 
   mutt_wait_filter(thepid);
   mutt_file_unlink(smimeinfile);
-  mutt_file_unlink(certfile);
 
   fflush(fpout);
   rewind(fpout);