aboutsummaryrefslogtreecommitdiff
path: root/lib/message-id.c
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2018-08-30 08:29:14 -0300
committerDavid Bremner <david@tethera.net>2018-09-06 08:07:13 -0300
commitb31e44c678bf3bfe81bcc5f159e627551f12700f (patch)
tree1339a62a28fe461033ea5e1ad00f11e794f6754c /lib/message-id.c
parentb8e6f042c57739cc2b183395a3f9dfd64a6eb3d2 (diff)
lib: add _notmuch_message_id_parse_strict
The idea is that if a message-id parses with this function, the MUA generating it was probably sane, and in particular it's probably safe to use the result as a parent from In-Reply-to.
Diffstat (limited to 'lib/message-id.c')
-rw-r--r--lib/message-id.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/message-id.c b/lib/message-id.c
index d7541d50..e71ce9f4 100644
--- a/lib/message-id.c
+++ b/lib/message-id.c
@@ -1,4 +1,5 @@
#include "notmuch-private.h"
+#include "string-util.h"
/* Advance 'str' past any whitespace or RFC 822 comments. A comment is
* a (potentially nested) parenthesized sequence with '\' used to
@@ -94,3 +95,32 @@ _notmuch_message_id_parse (void *ctx, const char *message_id, const char **next)
return result;
}
+
+char *
+_notmuch_message_id_parse_strict (void *ctx, const char *message_id)
+{
+ const char *s, *end;
+
+ if (message_id == NULL || *message_id == '\0')
+ return NULL;
+
+ s = skip_space (message_id);
+ if (*s == '<')
+ s++;
+ else
+ return NULL;
+
+ for (end = s; *end && *end != '>'; end++)
+ if (isspace (*end))
+ return NULL;
+
+ if (*end != '>')
+ return NULL;
+ else {
+ const char *last = skip_space (end + 1);
+ if (*last != '\0')
+ return NULL;
+ }
+
+ return talloc_strndup (ctx, s, end - s);
+}