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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to