OSDN Git Service

b/2273942 Fixed iterator concurrent modification error.
authorErik <roboerik@android.com>
Wed, 24 Feb 2010 23:47:13 +0000 (15:47 -0800)
committerErik <roboerik@android.com>
Thu, 25 Feb 2010 02:31:01 +0000 (18:31 -0800)
Invalid addresses were being removed from a list while iterating through it, causing a
ConcurrentModificationException. Changed the loop to use an explicit iterator and do
removals through that iterator.

src/com/android/calendar/EditEvent.java

index e907a6f..e9abe67 100644 (file)
@@ -88,6 +88,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.TimeZone;
 
@@ -854,10 +855,12 @@ public class EditEvent extends Activity implements View.OnClickListener,
 
         // validate the emails, out of paranoia.  they should already be
         // validated on input, but drop any invalid emails just to be safe.
-        for (Rfc822Token address : addresses) {
+        Iterator<Rfc822Token> addressIterator = addresses.iterator();
+        while (addressIterator.hasNext()) {
+            Rfc822Token address = addressIterator.next();
             if (!mEmailValidator.isValid(address.getAddress())) {
                 Log.w(TAG, "Dropping invalid attendee email address: " + address);
-                addresses.remove(address);
+                addressIterator.remove();
             }
         }
         return addresses;