message: use fake Message-ID when empty

Previously, mu generated a fake message ID for messages without a
Message-ID header. This fake message ID allows these messages to show in
an --include-related query. However, if a message contained a Message-ID
header with the value equal to the empty string, we did not generate a
fake message ID in the index, and consequently, these messages failed to
appear in an --include-related query. This change uses a fake message ID
when the Message-ID header is absent _or_ empty.
This commit is contained in:
Daniel Colascione 2022-10-23 14:30:35 -04:00 committed by Dirk-Jan C. Binnema
parent c169049064
commit fcfbbcacfe
2 changed files with 48 additions and 1 deletions

View File

@ -638,7 +638,10 @@ fill_document(Message::Private& priv)
const auto path{doc.string_value(Field::Id::Path)};
const auto refs{mime_msg.references()};
const auto message_id{mime_msg.message_id().value_or(fake_message_id(path))};
const auto& raw_message_id = mime_msg.message_id();
const auto message_id = raw_message_id.has_value() && !raw_message_id->empty()
? *raw_message_id
: fake_message_id(path);
process_message(mime_msg, path, priv);

View File

@ -969,6 +969,48 @@ id Emoji", EmojiSymbols;">
}
static void
test_message_message_id()
{
constexpr const auto msg1 =
R"(From: "Mu Test" <mu@djcbsoftware.nl>
To: mu@djcbsoftware.nl
Message-ID: <87lew9xddt.fsf@djcbsoftware.nl>
abc
)";
constexpr const auto msg2 =
R"(From: "Mu Test" <mu@djcbsoftware.nl>
To: mu@djcbsoftware.nl
abc
)";
constexpr const auto msg3 =
R"(From: "Mu Test" <mu@djcbsoftware.nl>
To: mu@djcbsoftware.nl
Message-ID:
abc
)";
const auto m1{Message::make_from_text(msg1, "/foo/cur/m123:2,S")};
assert_valid_result(m1);
const auto m2{Message::make_from_text(msg2, "/foo/cur/m456:2,S")};
assert_valid_result(m2);
const auto m3{Message::make_from_text(msg3, "/foo/cur/m789:2,S")};
assert_valid_result(m3);
assert_equal(m1->message_id(), "87lew9xddt.fsf@djcbsoftware.nl");
/* both with absent and empty message-id, generate "random" fake one,
* which must end in @mu.id */
g_assert_true(g_str_has_suffix(m2->message_id().c_str(), "@mu.id"));
g_assert_true(g_str_has_suffix(m3->message_id().c_str(), "@mu.id"));
}
static void
test_message_fail ()
@ -1015,6 +1057,8 @@ main(int argc, char* argv[])
test_message_references);
g_test_add_func("/message/message/outlook-body",
test_message_outlook_body);
g_test_add_func("/message/message/message-id",
test_message_message_id);
g_test_add_func("/message/message/fail",
test_message_fail);
g_test_add_func("/message/message/sanitize-maildir",