X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=message.c;h=bd551ccd1a0a14eb899a0dc91ee019fbb18d26ae;hp=03583c8d0e43f122215bdbcdd6e7c9ca92242a79;hb=ed6ee7330d28c65cb3990cbe4a5ac6182bf23402;hpb=371091139abb00e0eb6b17cd19311e2a30fd7470 diff --git a/message.c b/message.c index 03583c8d..bd551ccd 100644 --- a/message.c +++ b/message.c @@ -37,6 +37,8 @@ struct _notmuch_message { /* Header storage */ int restrict_headers; GHashTable *headers; + int broken_headers; + int good_headers; /* Parsing state */ char *line; @@ -234,12 +236,21 @@ notmuch_message_get_header (notmuch_message_t *message, colon = strchr (message->line, ':'); if (colon == NULL) { - fprintf (stderr, "Warning: Unexpected non-header line: %s\n", - message->line); + message->broken_headers++; + /* A simple heuristic for giving up on things that just + * don't look like mail messages. */ + if (message->broken_headers >= 10 && + message->good_headers < 5) + { + message->parsing_finished = 1; + continue; + } NEXT_HEADER_LINE (NULL); continue; } + message->good_headers++; + header = xstrndup (message->line, colon - message->line); if (message->restrict_headers && @@ -262,8 +273,9 @@ notmuch_message_get_header (notmuch_message_t *message, match = (strcasecmp (header, header_desired) == 0); - g_hash_table_insert (message->headers, header, - xstrdup (message->value.str)); + value = xstrdup (message->value.str); + + g_hash_table_insert (message->headers, header, value); if (match) return value;