This is an automated email from the ASF dual-hosted git repository. jaikiran pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ant.git
The following commit(s) were added to refs/heads/master by this push: new c4aeb9c bz-63921 Using a "live" keySet() can result in ConcurrentModificationException c4aeb9c is described below commit c4aeb9cd9305d840eb91a798c8313f32580c6f0c Author: Jaikiran Pai <jaiki...@apache.org> AuthorDate: Fri Jan 10 19:57:20 2020 +0530 bz-63921 Using a "live" keySet() can result in ConcurrentModificationException --- WHATSNEW | 2 ++ src/main/org/apache/tools/ant/XmlLogger.java | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index 68dc51f..bd2d22f 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -26,6 +26,8 @@ Fixed bugs: optional dependencies were missing. This has now been fixed. Bugzilla Report 63438 + * Fixes a potential ConcurrentModificationException in XMLLogger. + Bugzilla Report 63921 Other changes: -------------- diff --git a/src/main/org/apache/tools/ant/XmlLogger.java b/src/main/org/apache/tools/ant/XmlLogger.java index 1f443c0..b75ce2f 100644 --- a/src/main/org/apache/tools/ant/XmlLogger.java +++ b/src/main/org/apache/tools/ant/XmlLogger.java @@ -25,8 +25,10 @@ import java.io.Writer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.HashSet; import java.util.Hashtable; import java.util.Map; +import java.util.Set; import java.util.Stack; import javax.xml.parsers.DocumentBuilder; @@ -346,9 +348,13 @@ public class XmlLogger implements BuildLogger { if (element != null) { return element; } - return tasks.keySet().stream().filter(UnknownElement.class::isInstance) - .filter(key -> ((UnknownElement) key).getTask() == task).findFirst() - .map(key -> tasks.get(key)).orElse(null); + final Set<Task> knownTasks = new HashSet<>(tasks.keySet()); + for (final Task t : knownTasks) { + if (t instanceof UnknownElement && ((UnknownElement) t).getTask() == task) { + return tasks.get(t); + } + } + return null; } /**