svn commit: r1853824 - in /cocoon/branches/BRANCH_2_1_X: src/blocks/xsp/java/org/apache/cocoon/components/language/generator/GeneratorSelector.java src/java/org/apache/cocoon/reading/ResourceReader.java status.xml
[email protected] Mon, 18 Feb 2019 20:52:23 -0000
| Newsgroups | gmane.text.xml.cocoon.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: anathaniel
Date: Mon Feb 18 20:52:23 2019
New Revision: 1853824
URL: http://svn.apache.org/viewvc?rev=1853824&view=rev
Log:
Unsynchronized HashMap.put in ResourceReader and GeneratorSelector may lead to infinite loop
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/xsp/java/org/apache/cocoon/components/language/generator/GeneratorSelector.java
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/reading/ResourceReader.java
cocoon/branches/BRANCH_2_1_X/status.xml
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/xsp/java/org/apache/cocoon/components/language/generator/GeneratorSelector.java
URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/src/blocks/xsp/java/org/apache/cocoon/components/language/generator/GeneratorSelector.java?rev=1853824&r1=1853823&r2=1853824&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/xsp/java/org/apache/cocoon/components/language/generator/GeneratorSelector.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/xsp/java/org/apache/cocoon/components/language/generator/GeneratorSelector.java Mon Feb 18 20:52:23 2019
@@ -5,9 +5,9 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -36,6 +36,7 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
/**
* This interface is the common base of all Compiled Components. This
@@ -63,7 +64,7 @@ public class GeneratorSelector extends E
protected Map componentHandlers = new HashMap();
/** Dynamic component handlers mapping. */
- private Map componentMapping = new HashMap();
+ private Map componentMapping = new ConcurrentHashMap();
public void contextualize(Context context) {
Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/reading/ResourceReader.java
URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/reading/ResourceReader.java?rev=1853824&r1=1853823&r2=1853824&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/reading/ResourceReader.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/reading/ResourceReader.java Mon Feb 18 20:52:23 2019
@@ -41,7 +41,6 @@ import org.xml.sax.SAXException;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -93,7 +92,8 @@ public class ResourceReader extends Abst
/**
* The list of generated documents
*/
- private static final Map documents = Collections.synchronizedMap(new HashMap());
+ private static final Map documents = new HashMap();
+ private static final Object documentsLock = new Object();
protected long configuredExpires;
protected boolean configuredQuickTest;
@@ -235,12 +235,14 @@ public class ResourceReader extends Abst
return inputSource.getLastModified();
}
- final String systemId = (String) documents.get(request.getRequestURI());
- if (systemId == null || inputSource.getURI().equals(systemId)) {
- return inputSource.getLastModified();
- }
+ synchronized (documentsLock) {
+ final String systemId = (String) documents.get(request.getRequestURI());
+ if (systemId == null || inputSource.getURI().equals(systemId)) {
+ return inputSource.getLastModified();
+ }
- documents.remove(request.getRequestURI());
+ documents.remove(request.getRequestURI());
+ }
return 0;
}
@@ -288,7 +290,7 @@ public class ResourceReader extends Abst
}
response.setHeader("Content-Range", "bytes " + entityRange + "/" + entityLength);
-
+
if (actualByteRange.length() != -1) {
response.setHeader("Content-Length", String.valueOf(actualByteRange.length()));
}
@@ -345,7 +347,9 @@ public class ResourceReader extends Abst
if (!quickTest) {
// if everything is ok, add this to the list of generated documents
// (see http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=102921894301915 )
- documents.put(request.getRequestURI(), inputSource.getURI());
+ synchronized (documentsLock) {
+ documents.put(request.getRequestURI(), inputSource.getURI());
+ }
}
} catch (IOException e) {
// COCOON-2307: if the client severed the connection, no matter for it that we rethrow the exception as it will never receive it
Modified: cocoon/branches/BRANCH_2_1_X/status.xml
URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/status.xml?rev=1853824&r1=1853823&r2=1853824&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/status.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/status.xml Mon Feb 18 20:52:23 2019
@@ -184,6 +184,9 @@
<changes>
<release version="2.1.13" date="TBD">
+ <action dev="AN" type="fix">
+ Unsynchronized HashMap.put in ResourceReader and GeneratorSelector may lead to infinite loop.
+ </action>
<action dev="AN" type="update">
Update to poi-3.14
</action>