From: PJ Fanning Date: Sat, 27 Nov 2021 10:15:39 +0000 (+0000) Subject: [bug-65706] ignore trash parts in OOXML files X-Git-Tag: REL_5_2_0~165 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7475b1f6096eb9970661fef9927e66fb42667ffa;p=poi.git [bug-65706] ignore trash parts in OOXML files git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1895370 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java index 915dd7793c..45c1f282e6 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java +++ b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java @@ -330,14 +330,17 @@ public final class ZipPackage extends OPCPackage { final String entryName = zipArchiveEntry.getName(); PackagePartName ppn = null; - try { - // We get an error when we parse [Content_Types].xml - // because it's not a valid URI. - ppn = (CONTENT_TYPES_PART_NAME.equalsIgnoreCase(entryName)) ? null - : PackagingURIHelper.createPartName(ZipHelper.getOPCNameFromZipItemName(entryName)); - } catch (Exception e) { - // We assume we can continue, even in degraded mode ... - LOG.atWarn().withThrowable(e).log("Entry {} is not valid, so this part won't be added to the package.", entryName); + // ignore trash parts + if (!entryName.startsWith("[trash]")) { + try { + // We get an error when we parse [Content_Types].xml + // because it's not a valid URI. + ppn = (CONTENT_TYPES_PART_NAME.equalsIgnoreCase(entryName)) ? null + : PackagingURIHelper.createPartName(ZipHelper.getOPCNameFromZipItemName(entryName)); + } catch (Exception e) { + // We assume we can continue, even in degraded mode ... + LOG.atWarn().withThrowable(e).log("Entry {} is not valid, so this part won't be added to the package.", entryName); + } } this.partName = ppn; diff --git a/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java b/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java index 503119594f..458c46d750 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java +++ b/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java @@ -1289,6 +1289,16 @@ public final class TestXSSFWorkbook extends BaseTestXWorkbook { } } + @Test + void testIgnoreTrashParts() throws Exception { + try (XSSFWorkbook workbook = openSampleWorkbook("Excel_file_with_trash_item.xlsx")) { + for (PackagePart packagePart : workbook.getPackage().getParts()) { + assertFalse(packagePart.getPartName().toString().contains("trash"), + "should ignore part " + packagePart.getPartName()); + } + } + } + private static void expectFormattedContent(Cell cell, String value) { assertEquals(value, new DataFormatter().formatCellValue(cell), "Cell " + ref(cell) + " has wrong formatted content."); diff --git a/test-data/spreadsheet/Excel_file_with_trash_item.xlsx b/test-data/spreadsheet/Excel_file_with_trash_item.xlsx new file mode 100644 index 0000000000..ddd11f8314 Binary files /dev/null and b/test-data/spreadsheet/Excel_file_with_trash_item.xlsx differ