When converting, clip I;16 to be unsigned, not signed #6112
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.
Resolves #5967
So we can agree that the maximum for "I;16" is 65535, a.k.a 2**16 - 1, as expected.
When converting from "I" to "I;16", there is clipping. So you would expect that clipping to limit the values of "I", the 32-bit mode, to the maximum value of "I;16", the 16-bit mode.
Except it doesn't.
The following line incorrectly imagines that we need to clip to an signed range, not an unsigned range.
Pillow/src/libImaging/Convert.c
Line 40 in 38f4660
This PR corrects it.