]> granicus.if.org Git - neomutt/commitdiff
Properly parse and validate Message-IDs from my_hdrs. Closes #2452.
authorRocco Rutte <pdmef@gmx.net>
Thu, 15 Nov 2007 11:32:04 +0000 (12:32 +0100)
committerRocco Rutte <pdmef@gmx.net>
Thu, 15 Nov 2007 11:32:04 +0000 (12:32 +0100)
parse.c
protos.h
send.c

diff --git a/parse.c b/parse.c
index 8cf545305f78b1ff71378d3ad7f1f7dc95f104b0..9e5fc4c8a59e6cd593e32e0fd4bd57d6d1df3a99 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -926,7 +926,7 @@ time_t mutt_parse_date (const char *s, HEADER *h)
 }
 
 /* extract the first substring that looks like a message-id */
-static char *extract_message_id (const char *s)
+char *mutt_extract_message_id (const char *s)
 {
   const char *p;
   char *r;
@@ -1132,7 +1132,7 @@ int mutt_parse_rfc822_line (ENVELOPE *e, HEADER *hdr, char *line, char *p, short
     {
       /* We add a new "Message-ID:" when building a message */
       FREE (&e->message_id);
-      e->message_id = extract_message_id (p);
+      e->message_id = mutt_extract_message_id (p);
       matched = 1;
     }
     else if (!ascii_strncasecmp (line + 1, "ail-", 4))
index 43115963e49fec6a3486245140d0c0fb8c3f3c2a..675a6cd08163479c0ff8094a0bbd8456c8f0f184 100644 (file)
--- a/protos.h
+++ b/protos.h
@@ -90,6 +90,8 @@ void set_quadoption (int, int);
 int query_quadoption (int, const char *);
 int quadoption (int);
 
+char* mutt_extract_message_id (const char *);
+
 ADDRESS *mutt_default_from (void);
 ADDRESS *mutt_get_address (ENVELOPE *, char **);
 ADDRESS *mutt_lookup_alias (const char *s);
diff --git a/send.c b/send.c
index 5ae2bda5ce7a66c63e40f89d9b92617dbc82b996..0c2b4426532271d0308de35f75db8a1977cfaada 100644 (file)
--- a/send.c
+++ b/send.c
@@ -298,7 +298,15 @@ static void process_user_header (ENVELOPE *env)
       env->reply_to = rfc822_parse_adrlist (env->reply_to, uh->data + 9);
     }
     else if (ascii_strncasecmp ("message-id:", uh->data, 11) == 0)
-      mutt_str_replace (&env->message_id, uh->data + 11);
+    {
+      char *tmp = mutt_extract_message_id (uh->data + 11);
+      if (rfc822_valid_msgid (tmp) >= 0)
+      {
+       FREE(&env->message_id);
+       env->message_id = tmp;
+      } else
+       FREE(&tmp);
+    }
     else if (ascii_strncasecmp ("to:", uh->data, 3) != 0 &&
             ascii_strncasecmp ("cc:", uh->data, 3) != 0 &&
             ascii_strncasecmp ("bcc:", uh->data, 4) != 0 &&