mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 12:28:09 +01:00
add_message: Use sha-1 in place of overly long message ID.
Since Xapian has a limit on the maximum length of a term, we have to check for that before trying to add the message ID as a term. This fixes the bug reported by Mike Hommey here: <20091120132625.GA19246@glandium.org> I've also constructed 20 files with a range of message ID lengths centered around the Xapian term-length limit which I'll use to seed a new test suite soon.
This commit is contained in:
parent
f336ee034b
commit
5d56e931b9
1 changed files with 11 additions and 2 deletions
|
@ -892,7 +892,7 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
|
|||
|
||||
const char *date, *header;
|
||||
const char *from, *to, *subject;
|
||||
char *message_id;
|
||||
char *message_id = NULL;
|
||||
|
||||
if (message_ret)
|
||||
*message_ret = NULL;
|
||||
|
@ -937,11 +937,20 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
|
|||
header = notmuch_message_file_get_header (message_file, "message-id");
|
||||
if (header && *header != '\0') {
|
||||
message_id = _parse_message_id (message_file, header, NULL);
|
||||
|
||||
/* So the header value isn't RFC-compliant, but it's
|
||||
* better than no message-id at all. */
|
||||
if (message_id == NULL)
|
||||
message_id = talloc_strdup (message_file, header);
|
||||
} else {
|
||||
|
||||
/* Reject a Message ID that's too long. */
|
||||
if (message_id && strlen (message_id) + 1 > NOTMUCH_TERM_MAX) {
|
||||
talloc_free (message_id);
|
||||
message_id = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (message_id == NULL ) {
|
||||
/* No message-id at all, let's generate one by taking a
|
||||
* hash over the file's contents. */
|
||||
char *sha1 = notmuch_sha1_of_file (filename);
|
||||
|
|
Loading…
Reference in a new issue