From: <rb...@us...> - 2014-03-25 19:45:53
|
Revision: 9206 http://sourceforge.net/p/htmlunit/code/9206 Author: rbri Date: 2014-03-25 19:45:49 +0000 (Tue, 25 Mar 2014) Log Message: ----------- HashMap corruption (leads to an endless loop) because of concurrent access Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2014-03-25 19:41:44 UTC (rev 9205) +++ trunk/htmlunit/src/changes/changes.xml 2014-03-25 19:45:49 UTC (rev 9206) @@ -9,6 +9,9 @@ <body> <release version="2.15" date="???" description="Bugfixes"> <action type="fix" dev="rbri"> + HashMap corruption (leads to an endless loop) because of concurrent access. + </action> + <action type="fix" dev="rbri"> Cookies: Some fixes for the parsing of the expires date in IE11. </action> <action type="fix" dev="asashour" issue="1577"> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java 2014-03-25 19:41:44 UTC (rev 9205) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java 2014-03-25 19:45:49 UTC (rev 9206) @@ -34,6 +34,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; @@ -144,8 +145,11 @@ private HtmlUnitDOMBuilder builder_; private String originalCharset_; - private Map<String, SortedSet<DomElement>> idMap_ = new HashMap<String, SortedSet<DomElement>>(); - private Map<String, SortedSet<DomElement>> nameMap_ = new HashMap<String, SortedSet<DomElement>>(); + + // use Hashtable instead of HashMap to avoid corruption during concurrent access + private Map<String, SortedSet<DomElement>> idMap_ = new Hashtable<String, SortedSet<DomElement>>(); + private Map<String, SortedSet<DomElement>> nameMap_ = new Hashtable<String, SortedSet<DomElement>>(); + private SortedSet<BaseFrameElement> frameElements_ = new TreeSet<BaseFrameElement>(documentPositionComparator); private HtmlElement elementWithFocus_; private int parserCount_; |