]> granicus.if.org Git - neomutt/commitdiff
Prevent some pointers of 'struct body' being saved to hcache
authorRocco Rutte <pdmef@gmx.net>
Thu, 10 Jul 2008 20:02:47 +0000 (22:02 +0200)
committerRocco Rutte <pdmef@gmx.net>
Thu, 10 Jul 2008 20:02:47 +0000 (22:02 +0200)
This addresses the hcache safety issue but maybe doesn't fix it
completely, see #2942. This also prevents mutt from crashing when
using a hcache that was synced when syncing the mailbox (updating
changed and fully-parsed messages).

ChangeLog
hcache.c

index 595eac730384cbe8908bd7014e5bbd2fca208184..8aab3bde6ded18707899c2a4ac35b26a51df5b55 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-07-10 21:46 +0200  Aron Griffis  <agriffis@n01se.net>  (6244eefaea64)
+
+       * headers.c: Remove completely wrong comment regarding in-reply-to and
+       references
+
+       ...plus fix one other comment and some whitespace.
+
+2008-07-09 09:14 +0000  Rocco Rutte  <pdmef@gmx.net>  (2a9e9c487bad)
+
+       * ChangeLog, doc/mutt.man, main.c: Document redirection to trigger
+       batch send mode in mutt(1) and mutt -h. Closes #2070.
+
 2008-07-04 09:09 +0200  Ralf Wildenhues  <wildenhues@ins.uni-bonn.de>  (74b54f11c919)
 
        * protos.h: Fix syntax error for strtok_r compatitility prototype
index af27b82742b01d9f84241808c6eecf73df670804..2a988f5f74ae360810d50943bd3a8ce81ce92579 100644 (file)
--- a/hcache.c
+++ b/hcache.c
@@ -362,19 +362,31 @@ restore_parameter(PARAMETER ** p, const unsigned char *d, int *off, int convert)
 static unsigned char *
 dump_body(BODY * c, unsigned char *d, int *off, int convert)
 {
+  BODY nb;
+
+  memcpy (&nb, c, sizeof (BODY));
+
+  /* some fields are not safe to cache */
+  nb.content = NULL;
+  nb.charset = NULL;
+  nb.next = NULL;
+  nb.parts = NULL;
+  nb.hdr = NULL;
+  nb.aptr = NULL;
+
   lazy_realloc(&d, *off + sizeof (BODY));
-  memcpy(d + *off, c, sizeof (BODY));
+  memcpy(d + *off, &nb, sizeof (BODY));
   *off += sizeof (BODY);
 
-  d = dump_char(c->xtype, d, off, 0);
-  d = dump_char(c->subtype, d, off, 0);
+  d = dump_char(nb.xtype, d, off, 0);
+  d = dump_char(nb.subtype, d, off, 0);
 
-  d = dump_parameter(c->parameter, d, off, convert);
+  d = dump_parameter(nb.parameter, d, off, convert);
 
-  d = dump_char(c->description, d, off, convert);
-  d = dump_char(c->form_name, d, off, convert);
-  d = dump_char(c->filename, d, off, convert);
-  d = dump_char(c->d_filename, d, off, convert);
+  d = dump_char(nb.description, d, off, convert);
+  d = dump_char(nb.form_name, d, off, convert);
+  d = dump_char(nb.filename, d, off, convert);
+  d = dump_char(nb.d_filename, d, off, convert);
 
   return d;
 }
@@ -620,9 +632,9 @@ mutt_hcache_dump(header_cache_t *h, HEADER * header, int *off,
   memcpy(d + *off, &nh, sizeof (HEADER));
   *off += sizeof (HEADER);
 
-  d = dump_envelope(header->env, d, off, convert);
-  d = dump_body(header->content, d, off, convert);
-  d = dump_char(header->maildir_flags, d, off, convert);
+  d = dump_envelope(nh.env, d, off, convert);
+  d = dump_body(nh.content, d, off, convert);
+  d = dump_char(nh.maildir_flags, d, off, convert);
 
   return d;
 }