Raise OpcError for a package part with invalid XML instead of a bare lxml error - #1598
Open
eeshsaxena wants to merge 1 commit into
Open
Raise OpcError for a package part with invalid XML instead of a bare lxml error#1598eeshsaxena wants to merge 1 commit into
eeshsaxena wants to merge 1 commit into
Conversation
… XML Opening a .docx whose document.xml, [Content_Types].xml or a .rels part is not well-formed XML let a bare lxml.etree.XMLSyntaxError escape Document()/open. Wrap the two package-loading parse points (XmlPart.load and the OPC parse_xml) so a malformed part raises OpcError, matching how a non-package file already raises PackageNotFoundError.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Opening a
.docxwhose XML is corrupt surfaces a rawlxml.etree.XMLSyntaxErrorout ofDocument()rather than a python-docx error. It happens for the main document part and for the OPC parts:The XML is parsed in two spots while loading a package:
XmlPart.load(document parts) and the OPCparse_xml([Content_Types].xmland.rels). I wrapped both so a malformed part raisesOpcErrorwith the offending partname, which lines up with a non-package file already raisingPackageNotFoundError(both areOpcErrorsubclasses, soexcept OpcErrorcatches either).Added a unit test for
XmlPart.loadwith a malformed blob; it raises XMLSyntaxError on master and passes with the change, and the opc part/oxml tests still pass. Found it by fuzzingDocument()with corrupted docx packages.