Only byte-swap 16-bit PNGs on little-endian (#7792) #7796
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.
_png has some code that unconditionally byte-swaps 16-bit PNG
data (which is, per the spec, stored in big-endian order). This
isn't appropriate on a big-endian platform, though: this swap
being done unconditionally breaks the handling of 16-bit PNGs
on big-endian platforms (e.g. Fedora ppc64) (#7792). So, let's
use some macros numpy kindly defines for us to decide whether to
do this swap or not.
@QuLogic suggested using
PyArray_EquivByteorders
, but for some reason I kinda preferred using the underlying macros. If you would prefer doing it withPyArray_EquivByteorders(NPY_LITTLE, NPY_NATIVE)
or so, I can do that, just ask. This gets the failure count for a Fedora ppc64 build down to 14 (and I checked it doesn't break x86_64).