6764553: com.sun.org.apache.xml.internal.security.utils.IdResolver is not thread safe
Reviewed-by: valeriep
--- a/jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/IdResolver.java Tue Oct 28 18:21:36 2008 +0100
+++ b/jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/IdResolver.java Thu Oct 30 17:24:08 2008 -0400
@@ -70,10 +70,13 @@
*/
public static void registerElementById(Element element, String idValue) {
Document doc = element.getOwnerDocument();
- WeakHashMap elementMap = (WeakHashMap) docMap.get(doc);
- if(elementMap == null) {
- elementMap = new WeakHashMap();
- docMap.put(doc, elementMap);
+ WeakHashMap elementMap;
+ synchronized (docMap) {
+ elementMap = (WeakHashMap) docMap.get(doc);
+ if (elementMap == null) {
+ elementMap = new WeakHashMap();
+ docMap.put(doc, elementMap);
+ }
}
elementMap.put(idValue, new WeakReference(element));
}
@@ -153,7 +156,10 @@
private static Element getElementByIdType(Document doc, String id) {
if (log.isLoggable(java.util.logging.Level.FINE))
log.log(java.util.logging.Level.FINE, "getElementByIdType() Search for ID " + id);
- WeakHashMap elementMap = (WeakHashMap) docMap.get(doc);
+ WeakHashMap elementMap;
+ synchronized (docMap) {
+ elementMap = (WeakHashMap) docMap.get(doc);
+ }
if (elementMap != null) {
WeakReference weakReference = (WeakReference) elementMap.get(id);
if (weakReference != null) {