* Since POI 4.1.2 - pkg is closed if this method throws an exception
*/
private static PackagePart getPartFromOPCPackage(OPCPackage pkg, String coreDocumentRel) {
- PackageRelationship coreRel = pkg.getRelationshipsByType(coreDocumentRel).getRelationship(0);
+ try {
+ PackageRelationship coreRel = pkg.getRelationshipsByType(coreDocumentRel).getRelationship(0);
+
+ if (coreRel != null) {
+ PackagePart pp = pkg.getPart(coreRel);
+ if (pp == null) {
+ IOUtils.closeQuietly(pkg);
+ throw new POIXMLException("OOXML file structure broken/invalid - core document '" + coreRel.getTargetURI() + "' not found.");
+ }
+ return pp;
+ }
- if (coreRel != null) {
- PackagePart pp = pkg.getPart(coreRel);
- if (pp == null) {
+ coreRel = pkg.getRelationshipsByType(PackageRelationshipTypes.STRICT_CORE_DOCUMENT).getRelationship(0);
+ if (coreRel != null) {
IOUtils.closeQuietly(pkg);
- throw new POIXMLException("OOXML file structure broken/invalid - core document '" + coreRel.getTargetURI() + "' not found.");
+ throw new POIXMLException("Strict OOXML isn't currently supported, please see bug #57699");
}
- return pp;
- }
- coreRel = pkg.getRelationshipsByType(PackageRelationshipTypes.STRICT_CORE_DOCUMENT).getRelationship(0);
- if (coreRel != null) {
IOUtils.closeQuietly(pkg);
- throw new POIXMLException("Strict OOXML isn't currently supported, please see bug #57699");
+ throw new POIXMLException("OOXML file structure broken/invalid - no core document found!");
+ } catch (POIXMLException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ IOUtils.closeQuietly(pkg);
+ throw new POIXMLException("OOXML file structure broken/invalid", e);
}
-
- IOUtils.closeQuietly(pkg);
- throw new POIXMLException("OOXML file structure broken/invalid - no core document found!");
}
}
ZipArchiveThresholdInputStream zis = ZipHelper.openZipStream(in); // NOSONAR
try {
this.zipArchive = new ZipInputStreamZipEntrySource(zis);
- } catch (final IOException e) {
+ } catch (final IOException | RuntimeException e) {
IOUtils.closeQuietly(zis);
throw e;
}
}
public static AesZipFileZipEntrySource createZipEntrySource(InputStream is) throws IOException {
- // generate session key
- byte[] ivBytes = new byte[16], keyBytes = new byte[16];
- RandomSingleton.getInstance().nextBytes(ivBytes);
- RandomSingleton.getInstance().nextBytes(keyBytes);
- final File tmpFile = TempFile.createTempFile("protectedXlsx", ".zip");
- copyToFile(is, tmpFile, keyBytes, ivBytes);
- IOUtils.closeQuietly(is);
- return fileToSource(tmpFile, keyBytes, ivBytes);
+ try {
+ // generate session key
+ byte[] ivBytes = new byte[16], keyBytes = new byte[16];
+ RandomSingleton.getInstance().nextBytes(ivBytes);
+ RandomSingleton.getInstance().nextBytes(keyBytes);
+ final File tmpFile = TempFile.createTempFile("protectedXlsx", ".zip");
+ copyToFile(is, tmpFile, keyBytes, ivBytes);
+ return fileToSource(tmpFile, keyBytes, ivBytes);
+ } finally {
+ IOUtils.closeQuietly(is);
+ }
}
private static void copyToFile(InputStream is, File tmpFile, byte[] keyBytes, byte[] ivBytes) throws IOException {