Skip to content

Commit 788c66c

Browse files
author
Jorg K
committed
Bug 1197686 - Preprocess References header. r=jcranmer
1 parent 9a68eb8 commit 788c66c

2 files changed

Lines changed: 14 additions & 6 deletions

File tree

structuredHeaders.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,19 @@ structuredDecoders.set("Content-Transfer-Encoding", function (values) {
147147
structuredEncoders.set("Content-Transfer-Encoding", writeUnstructured);
148148

149149
// Some clients like outlook.com send non-compliant References headers that
150-
// separate values using commas. Temporarily replace commas with spaces until
151-
// full references header parsing is implemented. See bug 1154521.
152-
function replaceCommasWithSpaces(values) {
153-
return values[0].replace(/,/g, " ");
150+
// separate values using commas. Also, some clients don't separate References
151+
// with spaces, since these are optional accordint to RFC2822. So here we
152+
// preprocess these headers (see bug 1154521 and bug 1197686).
153+
function preprocessMessageIDs(values) {
154+
let msgId = /<[^>]*>/g;
155+
let match, ids = [];
156+
while ((match = msgId.exec(values)) !== null) {
157+
ids.push(match[0]);
158+
}
159+
return ids.join(' ');
154160
}
155-
structuredDecoders.set("References", replaceCommasWithSpaces);
156-
structuredDecoders.set("In-Reply-To", replaceCommasWithSpaces);
161+
structuredDecoders.set("References", preprocessMessageIDs);
162+
structuredDecoders.set("In-Reply-To", preprocessMessageIDs);
157163

158164
return Object.freeze({
159165
decoders: structuredDecoders,

test/test_structured_headers.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ suite('Structured headers', function () {
145145

146146
// This test is needed for clients sending non-compliant headers, see bug 1154521
147147
["<asd@asd.com>,<asdf@asdf.com>,<asdfg@asdfg.com>", "<asd@asd.com> <asdf@asdf.com> <asdfg@asdfg.com>"],
148+
// Test for bug 1197686
149+
["<asd@asd.com><asdf@asdf.com><asdfg@asdfg.com>", "<asd@asd.com> <asdf@asdf.com> <asdfg@asdfg.com>"],
148150
];
149151
multiple_unstructured_headers.forEach(function (header) {
150152
testHeader(header, multiple_unstructured_tests);

0 commit comments

Comments
 (0)