poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cen...@apache.org
Subject svn commit: r1737487 - in /poi/trunk: build.xml src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
Date Sat, 02 Apr 2016 11:01:43 GMT
Author: centic
Date: Sat Apr  2 11:01:43 2016
New Revision: 1737487

URL: http://svn.apache.org/viewvc?rev=1737487&view=rev
Log:
Fix some cases where file handles are not closed in OldExcelExtractor
Close resources in some more tests to make the file-leak report clean again

Modified:
    poi/trunk/build.xml
    poi/trunk/src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java
    poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java

Modified: poi/trunk/build.xml
URL: http://svn.apache.org/viewvc/poi/trunk/build.xml?rev=1737487&r1=1737486&r2=1737487&view=diff
==============================================================================
--- poi/trunk/build.xml (original)
+++ poi/trunk/build.xml Sat Apr  2 11:01:43 2016
@@ -531,7 +531,9 @@ under the License.
             <include name="xmlsec-2.0.1.jar"/>
             <include name="xmlsec-2.0.5.jar"/>
             <include name="bcprov-ext-jdk15on-1.51.jar"/>
+            <include name="bcprov-ext-jdk15on-1.53.jar"/>
             <include name="bcpkix-jdk15on-1.51.jar"/>
+            <include name="bcpkix-jdk15on-1.53.jar"/>
             <include name="slf4j-api-1.7.7.jar"/>
          </fileset>
         </delete>

Modified: poi/trunk/src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java?rev=1737487&r1=1737486&r2=1737487&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java Sat Apr  2 11:01:43
2016
@@ -44,6 +44,7 @@ import org.apache.poi.poifs.filesystem.D
 import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
 import org.apache.poi.poifs.filesystem.NotOLE2FileException;
 import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.util.IOUtils;
 
 /**
  * A text extractor for old Excel files, which are too old for
@@ -57,6 +58,10 @@ import org.apache.poi.ss.usermodel.Cell;
  */
 public class OldExcelExtractor implements Closeable {
     private RecordInputStream ris;
+
+    // sometimes we hold the stream here and thus need to ensure it is closed at some point
+    private Closeable toClose;
+
     private int biffVersion;
     private int fileType;
 
@@ -69,6 +74,7 @@ public class OldExcelExtractor implement
         try {
             poifs = new NPOIFSFileSystem(f);
             open(poifs);
+            toClose = poifs;
             return;
         } catch (OldExcelFormatException e) {
             // will be handled by workaround below
@@ -91,6 +97,11 @@ public class OldExcelExtractor implement
             // is thrown while opening
             biffStream.close();
             throw e;
+        } catch (RuntimeException e)  {
+            // ensure that the stream is properly closed here if an Exception
+            // is thrown while opening
+            biffStream.close();
+            throw e;
         }
     }
 
@@ -116,6 +127,7 @@ public class OldExcelExtractor implement
             }
         } else {
             ris = new RecordInputStream(bis);
+            toClose = bis;
             prepare();
         }
     }
@@ -279,9 +291,13 @@ public class OldExcelExtractor implement
 
     @Override
     public void close() {
-        // not necessary any more ...
+        // some cases require this close here
+        if(toClose != null) {
+            IOUtils.closeQuietly(toClose);
+            toClose = null;
+        }
     }
-    
+
     protected void handleNumericCell(StringBuffer text, double value) {
         // TODO Need to fetch / use format strings
         text.append(value);

Modified: poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java?rev=1737487&r1=1737486&r2=1737487&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java Sat Apr  2 11:01:43
2016
@@ -255,11 +255,27 @@ public abstract class OPCPackage impleme
       }
 
       OPCPackage pack = new ZipPackage(file, access);
-      if (pack.partList == null && access != PackageAccess.WRITE) {
-         pack.getParts();
-      }
-      pack.originalPackagePath = file.getAbsolutePath();
-      return pack;
+	   try {
+		   if (pack.partList == null && access != PackageAccess.WRITE) {
+			   pack.getParts();
+		   }
+		   pack.originalPackagePath = file.getAbsolutePath();
+		   return pack;
+	   } catch (InvalidFormatException e) {
+		   try {
+			   pack.close();
+		   } catch (IOException e1) {
+			   throw new IllegalStateException(e);
+		   }
+		   throw e;
+	   } catch (RuntimeException e) {
+		   try {
+			   pack.close();
+		   } catch (IOException e1) {
+			   throw new IllegalStateException(e);
+		   }
+		   throw e;
+	   }
    }
 
 	/**

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java?rev=1737487&r1=1737486&r2=1737487&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java Sat Apr  2
11:01:43 2016
@@ -693,7 +693,12 @@ public final class TestPackage {
         
         // OLE2 - Stream
         try {
-            OPCPackage.open(files.openResourceAsStream("SampleSS.xls"));
+			InputStream stream = files.openResourceAsStream("SampleSS.xls");
+			try {
+				OPCPackage.open(stream);
+			} finally {
+				stream.close();
+			}
             fail("Shouldn't be able to open OLE2");
         } catch (OLE2NotOfficeXmlFileException e) {
             assertTrue(e.getMessage().contains("The supplied data appears to be in the OLE2
Format"));
@@ -710,7 +715,12 @@ public final class TestPackage {
         
         // Raw XML - Stream
         try {
-            OPCPackage.open(files.openResourceAsStream("SampleSS.xml"));
+			InputStream stream = files.openResourceAsStream("SampleSS.xml");
+			try {
+				OPCPackage.open(stream);
+			} finally {
+				stream.close();
+			}
             fail("Shouldn't be able to open XML");
         } catch (NotOfficeXmlFileException e) {
             assertTrue(e.getMessage().contains("The supplied data appears to be a raw XML
file"));
@@ -727,7 +737,12 @@ public final class TestPackage {
         
         // ODF / ODS - Stream
         try {
-            OPCPackage.open(files.openResourceAsStream("SampleSS.ods"));
+			InputStream stream = files.openResourceAsStream("SampleSS.ods");
+			try {
+				OPCPackage.open(stream);
+			} finally {
+				stream.close();
+			}
             fail("Shouldn't be able to open ODS");
         } catch (ODFNotOfficeXmlFileException e) {
             assertTrue(e.toString().contains("The supplied data appears to be in ODF"));
@@ -744,7 +759,12 @@ public final class TestPackage {
         
         // Plain Text - Stream
         try {
-            OPCPackage.open(files.openResourceAsStream("SampleSS.txt"));
+			InputStream stream = files.openResourceAsStream("SampleSS.txt");
+			try {
+				OPCPackage.open(stream);
+			} finally {
+				stream.close();
+			}
             fail("Shouldn't be able to open Plain Text");
         } catch (NotOfficeXmlFileException e) {
             assertTrue(e.getMessage().contains("No valid entries or contents found"));



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org


Mime
View raw message