diff options
| author | David Bremner <david@tethera.net> | 2018-08-30 08:29:14 -0300 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2018-09-06 08:07:13 -0300 |
| commit | b31e44c678bf3bfe81bcc5f159e627551f12700f (patch) | |
| tree | 1339a62a28fe461033ea5e1ad00f11e794f6754c /lib/message-id.c | |
| parent | b8e6f042c57739cc2b183395a3f9dfd64a6eb3d2 (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.c | 30 |
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); +} |
