From: Carl Worth <cworth@cworth.org>
Date: Wed, 21 Oct 2009 17:07:34 +0000 (-0700)
Subject: notmuch setup: Collapse internal whitespace within message-id
X-Git-Tag: 0.1~798
X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=d29a6ec79167e87e4958d9500956668c430db4c6;p=notmuch

notmuch setup: Collapse internal whitespace within message-id

I'm too lazy to see what the RFC says, but I know that having
whitespace inside a message-ID is sure to confuse things. And
besides, this makes things more compatible with sup so that
I have some hope of importing sup labels.
---

diff --git a/database.cc b/database.cc
index 31afe7cc..1aef2a96 100644
--- a/database.cc
+++ b/database.cc
@@ -305,6 +305,7 @@ static char *
 parse_message_id (const char *message_id, const char **next)
 {
     const char *s, *end;
+    char *result;
 
     if (message_id == NULL)
 	return NULL;
@@ -339,10 +340,23 @@ parse_message_id (const char *message_id, const char **next)
 
     if (end > s && *end == '>')
 	end--;
-    if (end > s)
-	return strndup (s, end - s + 1);
-    else
+    if (end <= s)
 	return NULL;
+
+    result = strndup (s, end - s + 1);
+
+    /* Finally, collapse any whitespace that is within the message-id
+     * itself. */
+    {
+	char *r;
+	int len;
+
+	for (r = result, len = strlen (r); *r; r++, len--)
+	    if (*r == ' ' || *r == '\t')
+		memmove (r, r+1, len);
+    }
+
+    return result;
 }
 
 /* Parse a References header value, putting a copy of each referenced