Browse Source

bug 62592 -- prevent StackOverflowError on corrupt thmx

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1837658 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_4_0_0_FINAL
Tim Allison 5 years ago
parent
commit
86a51e4b9b

+ 3
- 0
src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java View File

@@ -250,6 +250,9 @@ public final class ZipPackage extends OPCPackage {
final ZipArchiveEntry contentTypeEntry =
zipArchive.getEntry(CONTENT_TYPES_PART_NAME);
if (contentTypeEntry != null) {
if (this.contentTypeManager != null) {
throw new InvalidFormatException("ContentTypeManager can only be created once. This must be a cyclic relation?");
}
try {
this.contentTypeManager = new ZipContentTypeManager(
zipArchive.getInputStream(contentTypeEntry), this);

+ 15
- 0
src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java View File

@@ -1090,6 +1090,21 @@ public final class TestPackage {
openInvalidFile("SampleSS.txt", true);
}

@Test(expected = InvalidFormatException.class)
public void testBug62592() throws Exception {
InputStream is = OpenXML4JTestDataSamples.openSampleStream("62592.thmx");
OPCPackage p = OPCPackage.open(is);
}

@Test
public void testBug62592SequentialCallsToGetParts() throws Exception {
//make absolutely certain that sequential calls don't throw InvalidFormatExceptions
String originalFile = OpenXML4JTestDataSamples.getSampleFileName("TestPackageCommon.docx");
OPCPackage p2 = OPCPackage.open(originalFile, PackageAccess.READ);
p2.getParts();
p2.getParts();
}

@Test
public void testDoNotCloseStream() throws IOException {
OutputStream os = Mockito.mock(OutputStream.class);

BIN
test-data/openxml4j/62592.thmx View File


Loading…
Cancel
Save