You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2022/03/20 06:52:43 UTC

svn commit: r1899071 - in /poi/trunk/poi-ooxml/src: main/java/org/apache/poi/openxml4j/opc/OPCPackage.java test/java/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePackageModel.java

Author: centic
Date: Sun Mar 20 06:52:43 2022
New Revision: 1899071

URL: http://svn.apache.org/viewvc?rev=1899071&view=rev
Log:
Bug 65854: Use revert() instead of close() when OPCPackage is opened read-only

Also add tests, however it is not possible to verify that no
logging takes place, so you have to use debugging to verify it.

Modified:
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/OPCPackage.java
    poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePackageModel.java

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/OPCPackage.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/OPCPackage.java?rev=1899071&r1=1899070&r2=1899071&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/OPCPackage.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/OPCPackage.java Sun Mar 20 06:52:43 2022
@@ -211,7 +211,9 @@ public abstract class OPCPackage impleme
            // pack.originalPackagePath = file.getAbsolutePath();
            return pack;
        } catch (InvalidFormatException | RuntimeException e) {
-           IOUtils.closeQuietly(pack);
+           // use revert() to free resources when the packgae is opened read-only
+           pack.revert();
+
            throw e;
        }
    }
@@ -272,14 +274,14 @@ public abstract class OPCPackage impleme
     */
    public static OPCPackage open(File file, PackageAccess access)
          throws InvalidFormatException {
-      if (file == null) {
-          throw new IllegalArgumentException("'file' must be given");
-      }
-      if (file.exists() && file.isDirectory()) {
-          throw new IllegalArgumentException("file must not be a directory");
-      }
+       if (file == null) {
+           throw new IllegalArgumentException("'file' must be given");
+       }
+       if (file.exists() && file.isDirectory()) {
+           throw new IllegalArgumentException("file must not be a directory");
+       }
 
-      OPCPackage pack = new ZipPackage(file, access);
+       OPCPackage pack = new ZipPackage(file, access);
        try {
            if (pack.partList == null && access != PackageAccess.WRITE) {
                pack.getParts();
@@ -287,7 +289,11 @@ public abstract class OPCPackage impleme
            pack.originalPackagePath = file.getAbsolutePath();
            return pack;
        } catch (InvalidFormatException | RuntimeException e) {
-           IOUtils.closeQuietly(pack);
+           if (access == PackageAccess.READ) {
+               pack.revert();
+           } else {
+               IOUtils.closeQuietly(pack);
+           }
            throw e;
        }
    }

Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePackageModel.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePackageModel.java?rev=1899071&r1=1899070&r2=1899071&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePackageModel.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/compliance/TestOPCCompliancePackageModel.java Sun Mar 20 06:52:43 2022
@@ -30,10 +30,12 @@ import org.apache.poi.openxml4j.exceptio
 import org.apache.poi.openxml4j.exceptions.PartAlreadyExistsException;
 import org.apache.poi.openxml4j.opc.ContentTypes;
 import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackageAccess;
 import org.apache.poi.openxml4j.opc.PackagePartName;
 import org.apache.poi.openxml4j.opc.PackageRelationshipTypes;
 import org.apache.poi.openxml4j.opc.PackagingURIHelper;
 import org.apache.poi.openxml4j.opc.TargetMode;
+import org.apache.poi.poifs.crypt.temp.AesZipFileZipEntrySource;
 import org.apache.poi.util.TempFile;
 import org.junit.jupiter.api.Test;
 
@@ -88,6 +90,26 @@ class TestOPCCompliancePackageModel {
         );
     }
 
+    @Test
+    void testInvalidformatExceptionZipSource() throws IOException {
+        try (AesZipFileZipEntrySource source = AesZipFileZipEntrySource.createZipEntrySource(
+                POIDataSamples.getOpenXML4JInstance().openResourceAsStream("OPCCompliance_DerivedPartNameFAIL.docx"))) {
+            assertThrows(InvalidFormatException.class, () ->
+                            OPCPackage.open(source),
+                    "Should fail for invalid file"
+            );
+        }
+    }
+
+    @Test
+    void testInvalidformatExceptionFile() {
+        assertThrows(InvalidFormatException.class,
+                () -> OPCPackage.open(POIDataSamples.getOpenXML4JInstance().
+                                getFile("OPCCompliance_DerivedPartNameFAIL.docx"), PackageAccess.READ),
+                "Should fail for invalid file"
+        );
+    }
+
     /**
      * Rule M1.12 : Packages shall not contain equivalent part names and package
      * implementers shall neither create nor recognize packages with equivalent



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