gh-153426: Raise BadZipFile for an invalid UTF-8 filename in zipfile#153428
Open
tonghuaroot wants to merge 1 commit into
Open
gh-153426: Raise BadZipFile for an invalid UTF-8 filename in zipfile#153428tonghuaroot wants to merge 1 commit into
tonghuaroot wants to merge 1 commit into
Conversation
…pfile When a central directory or local file header entry sets the UTF-8 filename flag (general purpose bit 11) but stores bytes that are not valid UTF-8, opening the archive raised a raw UnicodeDecodeError instead of the BadZipFile that signals a corrupt archive. Wrap the bit-11 filename decode in both _RealGetContents and ZipFile.open to raise BadZipFile, mirroring the handling of the unicode path extra field, while leaving the metadata_encoding decode path unchanged.
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.
When a ZIP entry sets general purpose bit 11,
zipfiledecodes the member name asUTF-8, but the decode is unguarded. A member name that is flagged as UTF-8 yet holds
bytes that are not valid UTF-8 makes
ZipFile()(central directory) andZipFile.open()/.read()(local file header) raiseUnicodeDecodeErrorinstead ofzipfile.BadZipFile.This wraps both UTF-8 filename decodes so the failure is re-raised as
BadZipFile, themodule's own error type, mirroring the sibling extra-field decoder
_decodeExtra.Callers that already handle
BadZipFilefor a corrupt archive no longer also have tocatch
UnicodeDecodeError. Valid archives are unchanged.