You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2019/03/06 19:17:22 UTC
svn commit: r1854941 - in /poi/trunk/src/ooxml:
java/org/apache/poi/ooxml/util/SAXHelper.java
testcases/org/apache/poi/ooxml/util/TestDocumentHelper.java
testcases/org/apache/poi/ooxml/util/TestSAXHelper.java
Author: fanningpj
Date: Wed Mar 6 19:17:22 2019
New Revision: 1854941
URL: http://svn.apache.org/viewvc?rev=1854941&view=rev
Log:
[bug-63240] make SAXHelper.newXMLReader non-synchronized]
Modified:
poi/trunk/src/ooxml/java/org/apache/poi/ooxml/util/SAXHelper.java
poi/trunk/src/ooxml/testcases/org/apache/poi/ooxml/util/TestDocumentHelper.java
poi/trunk/src/ooxml/testcases/org/apache/poi/ooxml/util/TestSAXHelper.java
Modified: poi/trunk/src/ooxml/java/org/apache/poi/ooxml/util/SAXHelper.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/ooxml/util/SAXHelper.java?rev=1854941&r1=1854940&r2=1854941&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/ooxml/util/SAXHelper.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/ooxml/util/SAXHelper.java Wed Mar 6 19:17:22 2019
@@ -46,7 +46,7 @@ public final class SAXHelper {
/**
* Creates a new SAX XMLReader, with sensible defaults
*/
- public static synchronized XMLReader newXMLReader() throws SAXException, ParserConfigurationException {
+ public static XMLReader newXMLReader() throws SAXException, ParserConfigurationException {
XMLReader xmlReader = saxFactory.newSAXParser().getXMLReader();
xmlReader.setEntityResolver(IGNORING_ENTITY_RESOLVER);
trySetSAXFeature(xmlReader, XMLConstants.FEATURE_SECURE_PROCESSING);
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/ooxml/util/TestDocumentHelper.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/ooxml/util/TestDocumentHelper.java?rev=1854941&r1=1854940&r2=1854941&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/ooxml/util/TestDocumentHelper.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/ooxml/util/TestDocumentHelper.java Wed Mar 6 19:17:22 2019
@@ -18,11 +18,13 @@ package org.apache.poi.ooxml.util;
import org.junit.Test;
import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
@@ -47,10 +49,13 @@ public class TestDocumentHelper {
return DocumentHelper.newDocumentBuilder();
}));
}
+ HashSet<DocumentBuilder> dbs = new HashSet<>();
for(CompletableFuture<DocumentBuilder> future : futures) {
DocumentBuilder documentBuilder = future.get(10, TimeUnit.SECONDS);
assertTrue(documentBuilder.isNamespaceAware());
+ dbs.add(documentBuilder);
}
+ assertEquals(limit, dbs.size());
}
@Test
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/ooxml/util/TestSAXHelper.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/ooxml/util/TestSAXHelper.java?rev=1854941&r1=1854940&r2=1854941&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/ooxml/util/TestSAXHelper.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/ooxml/util/TestSAXHelper.java Wed Mar 6 19:17:22 2019
@@ -19,8 +19,13 @@ package org.apache.poi.ooxml.util;
import static org.junit.Assert.*;
import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
import org.junit.Test;
import org.xml.sax.InputSource;
@@ -46,4 +51,28 @@ public class TestSAXHelper {
}
reader.parse(new InputSource(new ByteArrayInputStream("<xml></xml>".getBytes("UTF-8"))));
}
+
+ @Test
+ public void testCreatingManyXMLReaders() throws Exception {
+ int limit = 1000;
+ ArrayList<CompletableFuture<XMLReader>> futures = new ArrayList<>();
+ for(int i = 0; i < limit; i++) {
+ futures.add(CompletableFuture.supplyAsync(() -> {
+ try {
+ return SAXHelper.newXMLReader();
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }));
+ }
+ HashSet<XMLReader> readers = new HashSet<>();
+ for(CompletableFuture<XMLReader> future : futures) {
+ XMLReader reader = future.get(10, TimeUnit.SECONDS);
+ assertTrue(reader.getFeature(XMLConstants.FEATURE_SECURE_PROCESSING));
+ readers.add(reader);
+ }
+ assertEquals(limit, readers.size());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org