Skip to content

Commit a645760

Browse files
committed
Do not repeat processing invalidly encoded address
1 parent ad0c383 commit a645760

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

lib/mail-parser.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -509,14 +509,18 @@ class MailParser extends Transform {
509509
}
510510

511511
decodeAddresses(addresses) {
512+
let processedAddress = new WeakSet();
512513
for (let i = 0; i < addresses.length; i++) {
513514
let address = addresses[i];
514515
address.name = (address.name || '').toString().trim();
515516

516-
if (!address.address && /^(=\?([^?]+)\?[Bb]\?[^?]*\?=)(\s*=\?([^?]+)\?[Bb]\?[^?]*\?=)*$/.test(address.name)) {
517+
if (!address.address && /^(=\?([^?]+)\?[Bb]\?[^?]*\?=)(\s*=\?([^?]+)\?[Bb]\?[^?]*\?=)*$/.test(address.name) && !processedAddress.has(address)) {
517518
let parsed = addressparser(this.libmime.decodeWords(address.name));
518519
if (parsed.length) {
519-
parsed.forEach(entry => addresses.push(entry));
520+
parsed.forEach(entry => {
521+
processedAddress.add(entry);
522+
addresses.push(entry);
523+
});
520524
}
521525

522526
// remove current element

test/issue-337-test.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
const simpleParser = require('..').simpleParser;
44

55
module.exports['Hangs when Reply-To invalid encoded'] = async test => {
6-
simpleParser('Content-type: text/plain\r\nReply-To: =?U� -8?B?0=D0=BA=D0=BE=D0=B2?=\n\r\n1234');
7-
6+
await simpleParser('Content-type: text/plain\r\nReply-To: =?U� -8?B?0=D0=BA=D0=BE=D0=B2?=\n\r\n1234');
87
test.done();
98
};

0 commit comments

Comments
 (0)