Fix: Set tag type accordingly if IFDRational with 0 denominator #8966
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.
Fixes #8965
Changes proposed in this pull request:
__float__
method in IFDRationalAfter investigating the issue, I found that the EXIF tag contains the value (-1, 0), which results in
float('nan')
via the IFDRational class. This was previously handled more gracefully, but starting from commit 5ff2027 (included in Pillow 11.1.0), all NaN IFDRational values are considered as TiffTags.RATIONAL.This causes a problem when the writer attempts to serialize these values using write_rational, which fails because
struct.pack("2L", ...)
cannot handle negative values. In such cases, write_signed_rational should be used instead.