1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-23 18:02:15 -05:00

refactor getHeaders and removeHeaders to use a common method and an

iterator to address a Market FC:

java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
at com.fsck.k9.mail.internet.MimeHeader.getHeader(MimeHeader.java:87)
at
com.fsck.k9.mail.internet.MimeHeader.getFirstHeader(MimeHeader.java:51)
at
com.fsck.k9.mail.internet.MimeMessage.getFirstHeader(MimeMessage.java:437)
at
com.fsck.k9.mail.internet.MimeMessage.getContentType(MimeMessage.java:130)
at
com.fsck.k9.mail.internet.MimeMessage.getMimeType(MimeMessage.java:159)
at
com.fsck.k9.mail.internet.MimeUtility.findFirstPartByMimeType(MimeUtility.java:971)
at com.fsck.k9.crypto.Apg.isEncrypted(Apg.java:464)
at
com.fsck.k9.activity.MessageView.updateDecryptLayout(MessageView.java:2702)
at
com.fsck.k9.activity.MessageView$Listener$6.run(MessageView.java:2466)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
This commit is contained in:
Jesse Vincent 2010-11-26 03:53:15 +00:00
parent 23254e8998
commit 1149f2d916

View File

@ -83,14 +83,7 @@ public class MimeHeader
public String[] getHeader(String name) public String[] getHeader(String name)
{ {
ArrayList<String> values = new ArrayList<String>(); ArrayList<String> values = findHeaders(name);
for (Field field : mFields)
{
if (field.name.equalsIgnoreCase(name))
{
values.add(field.value);
}
}
if (values.size() == 0) if (values.size() == 0)
{ {
return null; return null;
@ -100,17 +93,27 @@ public class MimeHeader
public void removeHeader(String name) public void removeHeader(String name)
{ {
ArrayList<Field> removeFields = new ArrayList<Field>();
for (Field field : mFields) ArrayList<String> removeFields = findHeaders(name);
{
if (field.name.equalsIgnoreCase(name))
{
removeFields.add(field);
}
}
mFields.removeAll(removeFields); mFields.removeAll(removeFields);
} }
private ArrayList findHeaders(String name) {
ArrayList<String> values = new ArrayList<String>();
Iterator<Field> iter = mFields.iterator();
while (iter.hasNext())
{
Field field = iter.next();
if (field.name.equalsIgnoreCase(name) )
{
values.add(field.value);
}
}
return values;
}
public void writeTo(OutputStream out) throws IOException, MessagingException public void writeTo(OutputStream out) throws IOException, MessagingException
{ {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out), 1024); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out), 1024);