dotnet / Open-XML-SDK

Open XML SDK by Microsoft
https://www.nuget.org/packages/DocumentFormat.OpenXml/
MIT License
3.99k stars 545 forks source link

Open document fail when Content_Types records paths with wrong case #1355

Open lindexi opened 1 year ago

lindexi commented 1 year ago

Describe the bug

The PresentationDocument.Open will throw the OpenXmlPackageException exception when we open the document which Content_Types records paths with wrong case.

DocumentFormat.OpenXml.Packaging.OpenXmlPackageException:“The document cannot be opened because there is an invalid part with an unexpected content type. 
[Part Uri=/ppt/presProps.xml], 
[Content Type=application/xml], 
[Expected Content Type=application/vnd.openxmlformats-officedocument.presentationml.presProps+xml].”

DocumentFormat.OpenXml.Packaging.OpenXmlPart.Load(DocumentFormat.OpenXml.Packaging.OpenXmlPackage, DocumentFormat.OpenXml.Packaging.OpenXmlPart, System.Uri, string, System.Collections.Generic.Dictionary<System.Uri, DocumentFormat.OpenXml.Packaging.OpenXmlPart>)
    DocumentFormat.OpenXml.Packaging.OpenXmlPartContainer.LoadReferencedPartsAndRelationships(DocumentFormat.OpenXml.Packaging.OpenXmlPackage, DocumentFormat.OpenXml.Packaging.OpenXmlPart, DocumentFormat.OpenXml.Packaging.RelationshipCollection, System.Collections.Generic.Dictionary<System.Uri, DocumentFormat.OpenXml.Packaging.OpenXmlPart>)
    DocumentFormat.OpenXml.Packaging.OpenXmlPartContainer.LoadReferencedPartsAndRelationships(DocumentFormat.OpenXml.Packaging.OpenXmlPackage, DocumentFormat.OpenXml.Packaging.OpenXmlPart, DocumentFormat.OpenXml.Packaging.RelationshipCollection, System.Collections.Generic.Dictionary<System.Uri, DocumentFormat.OpenXml.Packaging.OpenXmlPart>)
    DocumentFormat.OpenXml.Packaging.OpenXmlPackage.Load(System.IO.Packaging.Package)
    DocumentFormat.OpenXml.Packaging.PresentationDocument.Open(System.IO.Stream, bool, DocumentFormat.OpenXml.Packaging.OpenSettings)

The [Content_Types].xml records the PartName with wrong case, such as /ppt/presprops.xml what we expect is /ppt/presProps.xml.

And we can open the document with Office PowerPoint, but fail with OpenXMLSDK.

Screenshots

To Reproduce // Please add a self-contained, minimum viable repro of the issue. // If you require external resources, please provide a gist or GitHub repro // An Xunit style test is preferred, but a console application would work too.

Steps to reproduce the behavior:

  1. Download the test file
  2. Use the code to open the test file:
PresentationDocument.Open(testFilePath, false)

Observed behavior Throw the exception

Expected behavior The Open XML SDK can open the document file.

Desktop (please complete the following information):

Additional context

Why the Open XML SDK can not open this document? Because the Open XML SDK will use ZipPackage to get the ContentType, see

https://github.com/dotnet/runtime/blob/2d5a9162f6bd9583981d54363d077a04e4efc868/src/libraries/System.IO.Packaging/src/System/IO/Packaging/ZipPackage.cs#L604-L624

But the _overrideDictionary does not ignore case, see

https://github.com/dotnet/runtime/blob/2d5a9162f6bd9583981d54363d077a04e4efc868/src/libraries/System.IO.Packaging/src/System/IO/Packaging/ZipPackage.cs#L694-L699

And it may be fixed in https://github.com/dotnet/Open-XML-SDK/pull/1295

tymokvo commented 1 year ago

Hello, I believe I just encountered this issue. Is there a workaround based on the linked PR?

The error message is:

DocumentFormat.OpenXml.Packaging.OpenXmlPackageException: The document cannot be opened because there is an invalid part with an unexpected content type. 
[Part Uri=/docMetadata/LabelInfo.xml], 
[Content Type=application/xml], 
[Expected Content Type=application/vnd.ms-office.classificationlabels+xml].
JaneConan commented 6 months ago

DocumentFormat.OpenXml.Packaging.OpenXmlPackageException:“The document cannot be opened because there is an invalid part with an unexpected content type. [Part Uri=/xl/styles.xml], [Content Type=application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml], [Expected Content Type=application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml].”

lindexi commented 6 months ago

@JaneConan Sorry, I don't think we have the same problem.