/* Header storage */
int restrict_headers;
GHashTable *headers;
+ int broken_headers;
+ int good_headers;
/* Parsing state */
char *line;
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 &&
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;