Handle jpeg with COM segment #688
Merged
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.
Problem Summary
Issue:
imghdr.what()
fails to detect valid JPEG images generated by video processing tools (like ffmpeg/libavcodec), causing_is_img()
to returnFalse
even though PIL can read the images perfectly.Root Cause: These programmatically generated JPEGs have a COM (comment) segment (
0xFFFE
) immediately after the SOI marker (0xFFD8
), containing encoder metadata like "Lavc61.19.101". The existingtest_jpeg
function only checks for specific 4-byte patterns that don't include0xFFD8FFFE
.Proposed Solution
Add
b'\xff\xd8\xff\xfe'
to the existing pattern list intest_jpeg
.Generalization Assessment
This change is appropriately generic and would help many cases:
0xFFFE
is a reserved JPEG marker