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 )
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.
Valid but faulty image