From d3dc9b0338140ba5a53ba63525d58fa7dea2bb3d Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Thu, 27 Dec 2018 20:51:48 +0000 Subject: [PATCH] Bug 62629: Allow to handle files with invalid content types for pictures git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1849814 13f79535-47bb-0310-9956-ffa450edef68 --- .../opc/internal/ContentTypeManager.java | 7 +- .../opc/internal/TestContentTypeManager.java | 96 +++++++++++++++--- test-data/spreadsheet/62629_target.xlsm | Bin 0 -> 33015 bytes test-data/spreadsheet/62629_toMerge.xlsx | Bin 0 -> 21827 bytes 4 files changed, 86 insertions(+), 17 deletions(-) create mode 100644 test-data/spreadsheet/62629_target.xlsm create mode 100644 test-data/spreadsheet/62629_toMerge.xlsx diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ContentTypeManager.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ContentTypeManager.java index 9b22850ddc..4ca6189955 100644 --- a/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ContentTypeManager.java +++ b/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ContentTypeManager.java @@ -153,8 +153,11 @@ public abstract class ContentTypeManager { public void addContentType(PackagePartName partName, String contentType) { boolean defaultCTExists = this.defaultContentType.containsValue(contentType); String extension = partName.getExtension().toLowerCase(Locale.ROOT); - if ((extension.length() == 0) - || (this.defaultContentType.containsKey(extension) && !defaultCTExists)) { + if ((extension.length() == 0) || + // check if content-type and extension do match in both directions + // some applications create broken files, e.g. extension "jpg" instead of "jpeg" + (this.defaultContentType.containsKey(extension) && !defaultCTExists) || + (!this.defaultContentType.containsKey(extension) && defaultCTExists)) { this.addOverrideContentType(partName, contentType); } else if (!defaultCTExists) { this.addDefaultContentType(extension, contentType); diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java index 936d0f9e8c..e4d8d4c331 100644 --- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java +++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java @@ -18,9 +18,8 @@ package org.apache.poi.openxml4j.opc.internal; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; -import static org.junit.Assume.assumeTrue; import org.apache.poi.openxml4j.OpenXML4JTestDataSamples; import org.apache.poi.openxml4j.opc.OPCPackage; @@ -31,8 +30,26 @@ import org.apache.poi.openxml4j.opc.PackageRelationship; import org.apache.poi.openxml4j.opc.PackageRelationshipCollection; import org.apache.poi.openxml4j.opc.PackageRelationshipTypes; import org.apache.poi.openxml4j.opc.PackagingURIHelper; +import org.apache.poi.ss.usermodel.CreationHelper; +import org.apache.poi.ss.usermodel.Drawing; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.XSSFTestDataSamples; +import org.apache.poi.xssf.usermodel.XSSFClientAnchor; +import org.apache.poi.xssf.usermodel.XSSFDrawing; +import org.apache.poi.xssf.usermodel.XSSFPicture; +import org.apache.poi.xssf.usermodel.XSSFPictureData; +import org.apache.poi.xssf.usermodel.XSSFShape; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.Ignore; import org.junit.Test; +import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; +import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTTwoCellAnchor; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.List; public final class TestContentTypeManager { @@ -44,21 +61,12 @@ public final class TestContentTypeManager { String filepath = OpenXML4JTestDataSamples.getSampleFileName("sample.docx"); // Retrieves core properties part - OPCPackage p = OPCPackage.open(filepath, PackageAccess.READ); - try { + try (OPCPackage p = OPCPackage.open(filepath, PackageAccess.READ)) { PackageRelationshipCollection rels = p.getRelationshipsByType(PackageRelationshipTypes.CORE_PROPERTIES); PackageRelationship corePropertiesRelationship = rels.getRelationship(0); PackagePart coreDocument = p.getPart(corePropertiesRelationship); assertEquals("application/vnd.openxmlformats-package.core-properties+xml", coreDocument.getContentType()); - - // TODO - finish writing this test - assumeTrue("finish writing this test", false); - - ContentTypeManager ctm = new ZipContentTypeManager(coreDocument.getInputStream(), p); - assertNotNull(ctm); - } finally { - p.close(); } } @@ -108,11 +116,11 @@ public final class TestContentTypeManager { assertEquals(ctm.getContentType(name1), "foo-type1"); assertEquals(ctm.getContentType(name2), "foo-type1"); - assertEquals(ctm.getContentType(name3), null); + assertNull(ctm.getContentType(name3)); ctm.removeContentType(name1); - assertEquals(ctm.getContentType(name1), null); - assertEquals(ctm.getContentType(name2), null); + assertNull(ctm.getContentType(name1)); + assertNull(ctm.getContentType(name2)); } /** @@ -124,4 +132,62 @@ public final class TestContentTypeManager { // TODO fail("test not written"); } + + protected byte[] toByteArray(Workbook wb) { + try (ByteArrayOutputStream os = new ByteArrayOutputStream()) { + wb.write(os); + return os.toByteArray(); + } catch (IOException e) { + throw new RuntimeException("failed to write excel file."); + } + } + + @Test + public void bug62629CombinePictures() throws Exception { + // this file has incorrect default content-types which caused problems in Apache POI + // we now handle this broken file more gracefully + XSSFWorkbook book = XSSFTestDataSamples.openSampleWorkbook("62629_target.xlsm"); + XSSFWorkbook b = XSSFTestDataSamples.openSampleWorkbook("62629_toMerge.xlsx"); + for (int i = 0; i < b.getNumberOfSheets(); i++) { + XSSFSheet sheet = book.createSheet(b.getSheetName(i)); + copyPictures(sheet, b.getSheetAt(i)); + } + + XSSFWorkbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(book); + wbBack.close(); + book.close(); + b.close(); + } + + private static void copyPictures(Sheet newSheet, Sheet sheet) { + Drawing drawingOld = sheet.createDrawingPatriarch(); + Drawing drawingNew = newSheet.createDrawingPatriarch(); + CreationHelper helper = newSheet.getWorkbook().getCreationHelper(); + if (drawingNew instanceof XSSFDrawing) { + List shapes = ((XSSFDrawing) drawingOld).getShapes(); + for (int i = 0; i < shapes.size(); i++) { + if (shapes.get(i) instanceof XSSFPicture) { + XSSFPicture pic = (XSSFPicture) shapes.get(i); + XSSFPictureData picData = pic.getPictureData(); + int pictureIndex = newSheet.getWorkbook().addPicture(picData.getData(), picData.getPictureType()); + XSSFClientAnchor anchor = null; + CTTwoCellAnchor oldAnchor = ((XSSFDrawing) drawingOld).getCTDrawing().getTwoCellAnchorArray(i); + if (oldAnchor != null) { + anchor = (XSSFClientAnchor) helper.createClientAnchor(); + CTMarker markerFrom = oldAnchor.getFrom(); + CTMarker markerTo = oldAnchor.getTo(); + anchor.setDx1((int) markerFrom.getColOff()); + anchor.setDx2((int) markerTo.getColOff()); + anchor.setDy1((int) markerFrom.getRowOff()); + anchor.setDy2((int) markerTo.getRowOff()); + anchor.setCol1(markerFrom.getCol()); + anchor.setCol2(markerTo.getCol()); + anchor.setRow1(markerFrom.getRow()); + anchor.setRow2(markerTo.getRow()); + } + drawingNew.createPicture(anchor, pictureIndex); + } + } + } + } } diff --git a/test-data/spreadsheet/62629_target.xlsm b/test-data/spreadsheet/62629_target.xlsm new file mode 100644 index 0000000000000000000000000000000000000000..3b55bab943572aca6914b0500f19ce165c1f0ea0 GIT binary patch literal 33015 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 G_J05!9Uztf literal 0 HcmV?d00001 diff --git a/test-data/spreadsheet/62629_toMerge.xlsx b/test-data/spreadsheet/62629_toMerge.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..dac7d765e12ebbcb7faa6daad53920f28727547c GIT binary patch literal 21827 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