#24544: core.files.images.get_image_dimensions broken on some valid PNG images
-------------------------------------+-------------------------------------
     Reporter:  artscoop             |                    Owner:  nobody
         Type:  Uncategorized        |                   Status:  new
    Component:  File                 |                  Version:  1.7
  uploads/storage                    |
     Severity:  Normal               |               Resolution:
     Keywords:  PIL                  |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by artscoop):

 * needs_better_patch:   => 0
 * needs_tests:   => 0
 * needs_docs:   => 0


Old description:

> 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
> }}}

New description:

 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.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/24544#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/066.a562dff3a8d59dfd050455cf35c13b39%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to