Merge pull request #2885 from jyn514/issue-2846

Prevent crash when parsing invalid base64 email address
This commit is contained in:
cketti 2017-11-01 18:00:25 +01:00 committed by GitHub
commit 0a6ef2b70f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 2 deletions

View file

@ -2,12 +2,14 @@
package com.fsck.k9.mail; package com.fsck.k9.mail;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.apache.james.mime4j.MimeException; import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.codec.DecodeMonitor;
import org.apache.james.mime4j.codec.EncoderUtil; import org.apache.james.mime4j.codec.EncoderUtil;
import org.apache.james.mime4j.dom.address.Mailbox; import org.apache.james.mime4j.dom.address.Mailbox;
import org.apache.james.mime4j.dom.address.MailboxList; import org.apache.james.mime4j.dom.address.MailboxList;
@ -30,7 +32,6 @@ public class Address implements Serializable {
private String mPersonal; private String mPersonal;
public Address(Address address) { public Address(Address address) {
mAddress = address.mAddress; mAddress = address.mAddress;
mPersonal = address.mPersonal; mPersonal = address.mPersonal;
@ -142,7 +143,7 @@ public class Address implements Serializable {
} }
List<Address> addresses = new ArrayList<>(); List<Address> addresses = new ArrayList<>();
try { try {
MailboxList parsedList = DefaultAddressParser.DEFAULT.parseAddressList(addressList).flatten(); MailboxList parsedList = DefaultAddressParser.DEFAULT.parseAddressList(addressList, DecodeMonitor.SILENT).flatten();
for (int i = 0, count = parsedList.size(); i < count; i++) { for (int i = 0, count = parsedList.size(); i < count; i++) {
Mailbox mailbox = parsedList.get(i); Mailbox mailbox = parsedList.get(i);

View file

@ -180,4 +180,10 @@ public class AddressTest {
assertNull(result); assertNull(result);
} }
@Test
public void handlesInvalidBase64Encoding() throws Exception {
Address address = Address.parse("=?utf-8?b?invalid#?= <oops@example.com>")[0];
assertEquals("oops@example.com", address.getAddress());
}
} }