Open document fail when Content_Types records paths with wrong case
- Dominant language
- C#
- Stars
- 4.6k
- Forks
- 605
- PR merge metrics
- No merged PRs in 30d
Description
**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)
DocumentFormat.OpenXml.Packaging.OpenXmlPartContainer.LoadReferencedPartsAndRelationships(DocumentFormat.OpenXml.Packaging.OpenXmlPackage, DocumentFormat.OpenXml.Packaging.OpenXmlPart, DocumentFormat.OpenXml.Packaging.RelationshipCollection, System.Collections.Generic.Dictionary)
DocumentFormat.OpenXml.Packaging.OpenXmlPartContainer.LoadReferencedPartsAndRelationships(DocumentFormat.OpenXml.Packaging.OpenXmlPackage, DocumentFormat.OpenXml.Packaging.OpenXmlPart, DocumentFormat.OpenXml.Packaging.RelationshipCollection, System.Collections.Generic.Dictionary)
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](https://github.com/dotnet/Open-XML-SDK/files/10907289/Content_Types.Path.case.pptx)
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):**
- OS: any
- Office version [e.g. 16.0.15427.20178]
- .NET Target: any
- DocumentFormat.OpenXml Version: 2.19.0
**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
Contributor guide
Assessment
This issue has not been assessed yet.