From bcb898e9778d4b2078f59474a4ee34c9cf82d293 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Mon, 30 Jan 2012 12:59:54 +0000 Subject: [PATCH] Fix bug #52540 - Relax the M4.1 constraint on reading OOXML files, as some Office produced ones do have 2 Core Properties, despite the specification explicitly forbidding this git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1237631 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 1 + .../apache/poi/openxml4j/opc/OPCPackage.java | 54 ++++++++++++------ .../TestOPCComplianceCoreProperties.java | 36 +++++++++--- .../openxml4j/MultipleCoreProperties.docx | Bin 0 -> 43853 bytes 4 files changed, 63 insertions(+), 28 deletions(-) create mode 100644 test-data/openxml4j/MultipleCoreProperties.docx diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 7a021f3347..794df2f135 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 52540 - Relax the M4.1 constraint on reading OOXML files, as some Office produced ones do have 2 Core Properties, despite the specification explicitly forbidding this 52462 - Added implementation for SUMIFS() POIXMLPropertiesTextExtractor support for extracting custom OOXML properties as text 52449 - Support writing XWPF documents with glossaries (Glossaries are not yet supported, but can now be written out again without changes) diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java index 541700a136..f384cc650c 100644 --- a/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java +++ b/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java @@ -597,8 +597,13 @@ public abstract class OPCPackage implements RelationshipSource, Closeable { } /** - * Load the parts of the archive if it has not been done yet The - * relationships of each part are not loaded + * Load the parts of the archive if it has not been done yet. The + * relationships of each part are not loaded. + * + * Note - Rule M4.1 states that there may only ever be one Core + * Properties Part, but Office produced files will sometimes + * have multiple! As Office ignores all but the first, we relax + * Compliance with Rule M4.1, and ignore all others silently too. * * @return All this package's parts. */ @@ -609,31 +614,36 @@ public abstract class OPCPackage implements RelationshipSource, Closeable { if (partList == null) { /* Variables use to validate OPC Compliance */ - // Ensure rule M4.1 -> A format consumer shall consider more than + // Check rule M4.1 -> A format consumer shall consider more than // one core properties relationship for a package to be an error + // (We just log it and move on, as real files break this!) boolean hasCorePropertiesPart = false; + boolean needCorePropertiesPart = true; PackagePart[] parts = this.getPartsImpl(); this.partList = new PackagePartCollection(); for (PackagePart part : parts) { if (partList.containsKey(part._partName)) throw new InvalidFormatException( - "A part with the name '" - + part._partName - + "' already exist : Packages shall not contain equivalent part names and package implementers shall neither create nor recognize packages with equivalent part names. [M1.12]"); + "A part with the name '" + + part._partName + + "' already exist : Packages shall not contain equivalent " + + "part names and package implementers shall neither create " + + "nor recognize packages with equivalent part names. [M1.12]"); // Check OPC compliance rule M4.1 if (part.getContentType().equals( ContentTypes.CORE_PROPERTIES_PART)) { - if (!hasCorePropertiesPart) + if (!hasCorePropertiesPart) { hasCorePropertiesPart = true; - else - throw new InvalidFormatException( - "OPC Compliance error [M4.1]: there is more than one core properties relationship in the package !"); + } else { + logger.log(POILogger.WARN, "OPC Compliance error [M4.1]: " + + "there is more than one core properties relationship in the package! " + + "POI will use only the first, but other software may reject this file."); + } } - PartUnmarshaller partUnmarshaller = partUnmarshallers - .get(part._contentType); + PartUnmarshaller partUnmarshaller = partUnmarshallers.get(part._contentType); if (partUnmarshaller != null) { UnmarshallContext context = new UnmarshallContext(this, @@ -643,9 +653,14 @@ public abstract class OPCPackage implements RelationshipSource, Closeable { .unmarshall(context, part.getInputStream()); partList.put(unmarshallPart._partName, unmarshallPart); - // Core properties case - if (unmarshallPart instanceof PackagePropertiesPart) + // Core properties case-- use first CoreProperties part we come across + // and ignore any subsequent ones + if (unmarshallPart instanceof PackagePropertiesPart && + hasCorePropertiesPart && + needCorePropertiesPart) { this.packageProperties = (PackagePropertiesPart) unmarshallPart; + needCorePropertiesPart = false; + } } catch (IOException ioe) { logger.log(POILogger.WARN, "Unmarshall operation : IOException for " + part._partName); @@ -718,19 +733,20 @@ public abstract class OPCPackage implements RelationshipSource, Closeable { if (partList.containsKey(partName) && !partList.get(partName).isDeleted()) { throw new PartAlreadyExistsException( - "A part with the name '" - + partName.getName() - + "' already exists : Packages shall not contain equivalent part names and package implementers shall neither create nor recognize packages with equivalent part names. [M1.12]"); + "A part with the name '" + partName.getName() + "'" + + " already exists : Packages shall not contain equivalent part names and package" + + " implementers shall neither create nor recognize packages with equivalent part names. [M1.12]"); } /* Check OPC compliance */ - // Rule [M4.1]: The format designer shall specify and the format - // producer + // Rule [M4.1]: The format designer shall specify and the format producer // shall create at most one core properties relationship for a package. // A format consumer shall consider more than one core properties // relationship for a package to be an error. If present, the // relationship shall target the Core Properties part. + // Note - POI will read files with more than one Core Properties, which + // Office sometimes produces, but is strict on generation if (contentType.equals(ContentTypes.CORE_PROPERTIES_PART)) { if (this.packageProperties != null) throw new InvalidOperationException( diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java index b3a4a6320f..0cf5200092 100644 --- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java +++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java @@ -25,6 +25,7 @@ import java.net.URISyntaxException; import junit.framework.AssertionFailedError; import junit.framework.TestCase; +import org.apache.poi.POIDataSamples; import org.apache.poi.openxml4j.OpenXML4JTestDataSamples; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.openxml4j.exceptions.InvalidOperationException; @@ -33,7 +34,6 @@ import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackageRelationshipTypes; import org.apache.poi.openxml4j.opc.PackagingURIHelper; import org.apache.poi.openxml4j.opc.TargetMode; -import org.apache.poi.POIDataSamples; /** * Test core properties Open Packaging Convention compliance. @@ -42,6 +42,7 @@ import org.apache.poi.POIDataSamples; * at most one core properties relationship for a package. A format consumer * shall consider more than one core properties relationship for a package to be * an error. If present, the relationship shall target the Core Properties part. + * (POI relaxes this on reading, as Office sometimes breaks this) * * M4.2: The format designer shall not specify and the format producer shall not * create Core Properties that use the Markup Compatibility namespace as defined @@ -82,28 +83,43 @@ public final class TestOPCComplianceCoreProperties extends TestCase { } private static String extractInvalidFormatMessage(String sampleNameSuffix) { - InputStream is = OpenXML4JTestDataSamples.openComplianceSampleStream("OPCCompliance_CoreProperties_" + sampleNameSuffix); OPCPackage pkg; try { pkg = OPCPackage.open(is); } catch (InvalidFormatException e) { - // expected during successful test + // no longer required for successful test return e.getMessage(); } catch (IOException e) { throw new RuntimeException(e); } pkg.revert(); - // Normally must thrown an InvalidFormatException exception. throw new AssertionFailedError("expected OPC compliance exception was not thrown"); } /** * Test M4.1 rule. */ - public void testOnlyOneCorePropertiesPart() { - String msg = extractInvalidFormatMessage("OnlyOneCorePropertiesPartFAIL.docx"); - assertEquals("OPC Compliance error [M4.1]: there is more than one core properties relationship in the package !", msg); + public void testOnlyOneCorePropertiesPart() throws Exception { + // We have relaxed this check, so we can read the file anyway + try { + extractInvalidFormatMessage("OnlyOneCorePropertiesPartFAIL.docx"); + fail("M4.1 should be being relaxed"); + } catch (AssertionFailedError e) {} + + // We will use the first core properties, and ignore the others + InputStream is = OpenXML4JTestDataSamples.openSampleStream("MultipleCoreProperties.docx"); + OPCPackage pkg = OPCPackage.open(is); + + // We can see 2 by type + assertEquals(2, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size()); + // But only the first one by relationship + assertEquals(1, pkg.getPartsByRelationshipType(PackageRelationshipTypes.CORE_PROPERTIES).size()); + // It should be core.xml not the older core1.xml + assertEquals( + "/docProps/core.xml", + pkg.getPartsByRelationshipType(PackageRelationshipTypes.CORE_PROPERTIES).get(0).getPartName().toString() + ); } private static URI createURI(String text) { @@ -131,7 +147,8 @@ public final class TestOPCComplianceCoreProperties extends TestCase { try { pkg.addRelationship(PackagingURIHelper.createPartName(partUri), TargetMode.INTERNAL, PackageRelationshipTypes.CORE_PROPERTIES); - fail("expected OPC compliance exception was not thrown"); + // no longer fail on compliance error + //fail("expected OPC compliance exception was not thrown"); } catch (InvalidFormatException e) { throw new RuntimeException(e); } catch (InvalidOperationException e) { @@ -157,7 +174,8 @@ public final class TestOPCComplianceCoreProperties extends TestCase { try { pkg.createPart(PackagingURIHelper.createPartName(partUri), ContentTypes.CORE_PROPERTIES_PART); - fail("expected OPC compliance exception was not thrown"); + // no longer fail on compliance error + //fail("expected OPC compliance exception was not thrown"); } catch (InvalidFormatException e) { throw new RuntimeException(e); } catch (InvalidOperationException e) { diff --git a/test-data/openxml4j/MultipleCoreProperties.docx b/test-data/openxml4j/MultipleCoreProperties.docx new file mode 100644 index 0000000000000000000000000000000000000000..4c19ae77aabea4798a132139b086a4cce7f8e40f GIT binary patch literal 43853 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 ZpN;ry7{DQZz6TTVvkX{_bc%jH`aeJ-7VQ84 literal 0 HcmV?d00001 -- 2.39.5