From 803e21a9a87c3e1904a542de3575834f5aaa5cb6 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Tue, 12 Oct 2021 23:18:17 +0300 Subject: [PATCH] ensure that in-reply-to and message-id headers are stored as single strings, not arrays --- imap-core/lib/imap-tools.js | 6 ++++++ imap-core/lib/indexer/parse-mime-tree.js | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/imap-core/lib/imap-tools.js b/imap-core/lib/imap-tools.js index 5c16f792..36f95189 100644 --- a/imap-core/lib/imap-tools.js +++ b/imap-core/lib/imap-tools.js @@ -559,6 +559,12 @@ module.exports.getQueryResponse = function (query, message, options) { case 'envelope': if (message.envelope) { value = message.envelope; + // cast invalidly stored In-Reply-To (8) and Message-ID (9) to strings + for (let index of [9, 10]) { + if (value[index] && Array.isArray(value[index])) { + value[index] = value[index].pop() || null; + } + } } else { if (!mimeTree) { mimeTree = indexer.parseMimeTree(message.raw); diff --git a/imap-core/lib/indexer/parse-mime-tree.js b/imap-core/lib/indexer/parse-mime-tree.js index 0b371a42..5661508c 100644 --- a/imap-core/lib/indexer/parse-mime-tree.js +++ b/imap-core/lib/indexer/parse-mime-tree.js @@ -217,7 +217,16 @@ class MIMEParser { }); // ensure single value for selected fields - ['content-transfer-encoding', 'content-id', 'content-description', 'content-language', 'content-md5', 'content-location'].forEach(key => { + [ + 'in-reply-to', + 'message-id', + 'content-transfer-encoding', + 'content-id', + 'content-description', + 'content-language', + 'content-md5', + 'content-location' + ].forEach(key => { if (Array.isArray(this._node.parsedHeader[key])) { this._node.parsedHeader[key] = this._node.parsedHeader[key].pop(); }