mirror of https://github.com/apache/poi.git
try to close resources when RuntimeExceptions happen
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1896140 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f4bb4560ed
commit
b88cb5620a
|
@ -739,24 +739,31 @@ public class POIXMLDocumentPart {
|
|||
* 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.");
|
||||
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;
|
||||
}
|
||||
|
||||
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");
|
||||
}
|
||||
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!");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -130,7 +130,7 @@ public final class ZipPackage extends OPCPackage {
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -105,14 +105,17 @@ public final class AesZipFileZipEntrySource implements ZipEntrySource {
|
|||
}
|
||||
|
||||
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 {
|
||||
|
|
Loading…
Reference in New Issue