Author: uschindler
Date: Wed Aug 13 23:13:43 2014
New Revision: 1617854

URL: http://svn.apache.org/r1617854
Log:
Merged revision(s) 1617849 from poi/trunk:
More cleanups for bug #56814 and some more external entity leaks of #56164

Added:
    
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/util/DocumentHelper.java
      - copied, changed from r1617849, 
poi/trunk/src/ooxml/java/org/apache/poi/util/DocumentHelper.java
Modified:
    poi/branches/REL_3_10_BRANCH/   (props changed)
    
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/util/SAXHelper.java
    
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java
    
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFEventBasedExcelExtractor.java
    
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java
    
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java

Propchange: poi/branches/REL_3_10_BRANCH/
------------------------------------------------------------------------------
  Merged /poi/trunk:r1617849

Copied: 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/util/DocumentHelper.java
 (from r1617849, 
poi/trunk/src/ooxml/java/org/apache/poi/util/DocumentHelper.java)
URL: 
http://svn.apache.org/viewvc/poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/util/DocumentHelper.java?p2=poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/util/DocumentHelper.java&p1=poi/trunk/src/ooxml/java/org/apache/poi/util/DocumentHelper.java&r1=1617849&r2=1617854&rev=1617854&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/util/DocumentHelper.java (original)
+++ 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/util/DocumentHelper.java
 Wed Aug 13 23:13:43 2014
@@ -53,7 +53,7 @@ public final class DocumentHelper {
     static {
         documentBuilderFactory.setNamespaceAware(true);
         documentBuilderFactory.setValidating(false);
-        trySetSAXFeature(documentBuilderFactory, 
XMLConstants.FEATURE_SECURE_PROCESSING, true);
+        trySetSAXFeature(documentBuilderFactory, 
SAXHelper.FEATURE_SECURE_PROCESSING, true);
         trySetXercesSecurityManager(documentBuilderFactory);
     }
 

Modified: 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/util/SAXHelper.java
URL: 
http://svn.apache.org/viewvc/poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/util/SAXHelper.java?rev=1617854&r1=1617853&r2=1617854&view=diff
==============================================================================
--- 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/util/SAXHelper.java 
(original)
+++ 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/util/SAXHelper.java 
Wed Aug 13 23:13:43 2014
@@ -25,9 +25,13 @@ import java.lang.reflect.Method;
 import org.dom4j.Document;
 import org.dom4j.DocumentException;
 import org.dom4j.io.SAXReader;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
 
 
 /**
@@ -35,34 +39,47 @@ import org.xml.sax.SAXException;
  */
 public final class SAXHelper {
     private static POILogger logger = POILogFactory.getLogger(SAXHelper.class);
-    
-    // remove this constant once on Java 6 and stax-api.jar was removed (which 
is missing this constant):
-    private static final String FEATURE_SECURE_PROCESSING = 
"http://javax.xml.XMLConstants/feature/secure-processing";;
-            
+
+    private SAXHelper() {}
+
     /**
-     * Creates a new SAX Reader, with sensible defaults
+     * Creates a new SAX XMLReader, with sensible defaults
      */
-    public static SAXReader getSAXReader() {
-        SAXReader xmlReader = new SAXReader();
-        xmlReader.setValidation(false);
-        xmlReader.setEntityResolver(new EntityResolver() {
-            public InputSource resolveEntity(String publicId, String systemId)
-                    throws SAXException, IOException {
-                return new InputSource(new StringReader(""));
-            }
-        });
+    public static synchronized XMLReader newXMLReader() throws SAXException, 
ParserConfigurationException {
+        XMLReader xmlReader = saxFactory.newSAXParser().getXMLReader();
+        xmlReader.setEntityResolver(IGNORING_ENTITY_RESOLVER);
         trySetSAXFeature(xmlReader, FEATURE_SECURE_PROCESSING, true);
         trySetXercesSecurityManager(xmlReader);
         return xmlReader;
     }
-    private static void trySetSAXFeature(SAXReader xmlReader, String feature, 
boolean enabled) {
+    
+    static final EntityResolver IGNORING_ENTITY_RESOLVER = new 
EntityResolver() {
+        // not in Java 5: @Override
+        public InputSource resolveEntity(String publicId, String systemId)
+                throws SAXException, IOException {
+            return new InputSource(new StringReader(""));
+        }
+    };
+    
+    private static final SAXParserFactory saxFactory;
+    static {
+        saxFactory = SAXParserFactory.newInstance();
+        saxFactory.setValidating(false);
+        saxFactory.setNamespaceAware(true);
+    }
+            
+    // remove this constant once on Java 6 and stax-api.jar was removed (which 
is missing this constant):
+    static final String FEATURE_SECURE_PROCESSING = 
"http://javax.xml.XMLConstants/feature/secure-processing";;
+            
+    private static void trySetSAXFeature(XMLReader xmlReader, String feature, 
boolean enabled) {
         try {
             xmlReader.setFeature(feature, enabled);
         } catch (Exception e) {
             logger.log(POILogger.INFO, "SAX Feature unsupported", feature, e);
         }
     }
-    private static void trySetXercesSecurityManager(SAXReader xmlReader) {
+    
+    private static void trySetXercesSecurityManager(XMLReader xmlReader) {
         // Try built-in JVM one first, standalone if not
         for (String securityManagerClassName : new String[] {
                 "com.sun.org.apache.xerces.internal.util.SecurityManager",
@@ -82,6 +99,21 @@ public final class SAXHelper {
     }
 
     /**
+     * Creates a new DOM4J SAXReader, with sensible defaults
+     */
+    public static SAXReader getSAXReader() throws DocumentException {
+        try {
+            SAXReader reader = new SAXReader(newXMLReader(), false);
+            reader.setEntityResolver(IGNORING_ENTITY_RESOLVER);
+            return reader;
+        } catch (SAXException saxe) {
+            throw new DocumentException(saxe);
+        } catch (ParserConfigurationException pce) {
+            throw new DocumentException(pce);
+        }
+    }
+    
+    /**
      * Parses the given stream via the default (sensible)
      * SAX Reader
      * @param inp Stream to read the XML data from

Modified: 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java
URL: 
http://svn.apache.org/viewvc/poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java?rev=1617854&r1=1617853&r2=1617854&view=diff
==============================================================================
--- 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java
 (original)
+++ 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java
 Wed Aug 13 23:13:43 2014
@@ -22,12 +22,11 @@ import java.util.ArrayList;
 import java.util.List;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
 
 import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.openxml4j.opc.PackageRelationship;
+import org.apache.poi.util.SAXHelper;
 import org.apache.poi.xssf.usermodel.XSSFRelation;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
 import org.xml.sax.Attributes;
@@ -135,10 +134,8 @@ public class ReadOnlySharedStringsTable 
      */
     public void readFrom(InputStream is) throws IOException, SAXException {
         InputSource sheetSource = new InputSource(is);
-        SAXParserFactory saxFactory = SAXParserFactory.newInstance();
         try {
-           SAXParser saxParser = saxFactory.newSAXParser();
-           XMLReader sheetParser = saxParser.getXMLReader();
+           XMLReader sheetParser = SAXHelper.newXMLReader();
            sheetParser.setContentHandler(this);
            sheetParser.parse(sheetSource);
         } catch(ParserConfigurationException e) {

Modified: 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFEventBasedExcelExtractor.java
URL: 
http://svn.apache.org/viewvc/poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFEventBasedExcelExtractor.java?rev=1617854&r1=1617853&r2=1617854&view=diff
==============================================================================
--- 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFEventBasedExcelExtractor.java
 (original)
+++ 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFEventBasedExcelExtractor.java
 Wed Aug 13 23:13:43 2014
@@ -22,8 +22,6 @@ import java.util.List;
 import java.util.Locale;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
 
 import org.apache.poi.POIXMLProperties;
 import org.apache.poi.POIXMLTextExtractor;
@@ -33,6 +31,7 @@ import org.apache.poi.POIXMLProperties.E
 import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
 import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.util.SAXHelper;
 import org.apache.poi.xssf.eventusermodel.ReadOnlySharedStringsTable;
 import org.apache.poi.xssf.eventusermodel.XSSFReader;
 import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler;
@@ -154,10 +153,8 @@ public class XSSFEventBasedExcelExtracto
        }
       
        InputSource sheetSource = new InputSource(sheetInputStream);
-       SAXParserFactory saxFactory = SAXParserFactory.newInstance();
        try {
-          SAXParser saxParser = saxFactory.newSAXParser();
-          XMLReader sheetParser = saxParser.getXMLReader();
+          XMLReader sheetParser = SAXHelper.newXMLReader();
           ContentHandler handler = new XSSFSheetXMLHandler(
                 styles, strings, sheetContentsExtractor, formatter, 
formulasNotResults);
           sheetParser.setContentHandler(handler);

Modified: 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java
URL: 
http://svn.apache.org/viewvc/poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java?rev=1617854&r1=1617853&r2=1617854&view=diff
==============================================================================
--- 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java
 (original)
+++ 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java
 Wed Aug 13 23:13:43 2014
@@ -26,8 +26,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Vector;
 
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Source;
@@ -41,6 +39,7 @@ import javax.xml.validation.SchemaFactor
 import javax.xml.validation.Validator;
 
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.util.DocumentHelper;
 import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFMap;
 import org.apache.poi.xssf.usermodel.XSSFRow;
@@ -101,15 +100,6 @@ public class XSSFExportToXml implements 
         exportToXML(os, "UTF-8", validate);
     }
 
-    private Document getEmptyDocument() throws ParserConfigurationException{
-
-        DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
-        DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
-        Document doc = docBuilder.newDocument();
-
-        return doc;
-    }
-
     /**
      * Exports the data in an XML stream
      *
@@ -127,7 +117,7 @@ public class XSSFExportToXml implements 
 
         String rootElement = map.getCtMap().getRootElement();
 
-        Document doc = getEmptyDocument();
+        Document doc = DocumentHelper.createDocument();
 
         Element root = null;
 

Modified: 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
URL: 
http://svn.apache.org/viewvc/poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java?rev=1617854&r1=1617853&r2=1617854&view=diff
==============================================================================
--- 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
 (original)
+++ 
poi/branches/REL_3_10_BRANCH/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
 Wed Aug 13 23:13:43 2014
@@ -24,13 +24,13 @@ import java.util.List;
 
 import javax.xml.namespace.NamespaceContext;
 import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
+import org.apache.poi.util.DocumentHelper;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
 import org.apache.poi.xssf.usermodel.XSSFTable;
@@ -75,11 +75,9 @@ public class XSSFImportFromXML {
      * @throws ParserConfigurationException if there are problems with XML 
parser configuration
      * @throws IOException  if there are problems reading the input string
      */
-    public void importFromXML(String xmlInputString) throws SAXException, 
XPathExpressionException, ParserConfigurationException, IOException {
+    public void importFromXML(String xmlInputString) throws SAXException, 
XPathExpressionException, IOException {
 
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setNamespaceAware(true);
-        DocumentBuilder builder = factory.newDocumentBuilder();
+        DocumentBuilder builder = DocumentHelper.newDocumentBuilder();
 
         Document doc = builder.parse(new InputSource(new 
StringReader(xmlInputString.trim())));
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to