Browse Source

#62513 - Don't try to parse embedded package relationships

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1834729 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_4_0_0_FINAL
Andreas Beeker 5 years ago
parent
commit
c038ccdd1d

+ 7
- 4
src/ooxml/java/org/apache/poi/ooxml/POIXMLFactory.java View File

@@ -44,10 +44,13 @@ public abstract class POIXMLFactory {
* @since by POI 3.14-Beta1
*/
public POIXMLDocumentPart createDocumentPart(POIXMLDocumentPart parent, PackagePart part) {
PackageRelationship rel = getPackageRelationship(parent, part);
POIXMLRelation descriptor = getDescriptor(rel.getRelationshipType());
if (descriptor == null || descriptor.getRelationClass() == null) {
final PackageRelationship rel = getPackageRelationship(parent, part);
final String relType = rel.getRelationshipType();
final POIXMLRelation descriptor = getDescriptor(relType);

// don't parse the document parts, if its class can't be determined
// or if it's a package relation of another embedded resource
if (descriptor == null || descriptor.getRelationClass() == null || POIXMLDocument.PACK_OBJECT_REL_TYPE.equals(relType)) {
LOGGER.log(POILogger.DEBUG, "using default POIXMLDocumentPart for " + rel.getRelationshipType());
return new POIXMLDocumentPart(parent, part);
}

+ 2
- 0
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java View File

@@ -139,6 +139,8 @@ public class XSLFRelation extends POIXMLRelation {
null
);

// this is not the same as in XSSFRelation.WORKBOOK, as it is usually used by embedded charts
// referencing the original embedded excel workbook
public static final XSLFRelation WORKBOOK = new XSLFRelation(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
POIXMLDocument.PACK_OBJECT_REL_TYPE,

+ 12
- 1
src/ooxml/testcases/org/apache/poi/ooxml/TestPOIXMLDocument.java View File

@@ -323,7 +323,18 @@ public final class TestPOIXMLDocument {
open.close();
}
}

@Test
public void dontParseEmbeddedDocuments() throws IOException {
// bug #62513
POIDataSamples pds = POIDataSamples.getSlideShowInstance();
try (InputStream is = pds.openResourceAsStream("bug62513.pptx");
XMLSlideShow ppt = new XMLSlideShow(is)) {
POIXMLDocumentPart doc = ppt.getSlides().get(12).getRelationById("rId3");
assertEquals(POIXMLDocumentPart.class, doc.getClass());
}
}

@Test
public void testOSGIClassLoading() {
// the schema type loader is cached per thread in POIXMLTypeLoader.

BIN
test-data/slideshow/bug62513.pptx View File


Loading…
Cancel
Save