Opened 10 years ago

Last modified 10 years ago

#24544 closed Cleanup/optimization

core.files.images.get_image_dimensions broken on some valid PNG images — at Version 1

Reported by: artscoop Owned by: nobody
Component: File uploads/storage Version: 1.7
Severity: Normal Keywords: PIL
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description (last modified by artscoop)

Hi,
second time I find a bug in the same function. Here, the function failed (exception raised and not caught) on a valid PNG file (this image: https://mega.co.nz/#!W0tXzBAK!iLprbqkVWFAzfcn2GUDRGHiH8Pxyi4DxCQi580shcec).
The error raised by PIL is a struct.error, which should be expected but is not caught by the chunk feeder loop.

The feeder knows this

            except zlib.error as e:
                # ignore zlib complaining on truncated stream, just feed more
                # data to parser (ticket #19457).
                if e.args[0].startswith("Error -5"):
                    pass
                else:
                    raise

but does not know this

from struct import error
...

except struct.error:
    pass

when you catch the proper exception, the file header fed to the parser becomes correct starting at offset 9214.
The good news is, it does not need tests.

Change History (2)

by artscoop, 10 years ago

Attachment: b.png added

Valid but faulty image

comment:1 by artscoop, 10 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top