Re: Corrupt image when identify gif image

莫红波 <[email protected]> Fri, 20 Nov 2015 11:42:57 +0800
Newsgroups gmane.comp.video.graphicsmagick.bugs
Message-ID <CACghtk1EQz51_SVgZn8pcDnb8oFOapcCh1g5M73x2+gO2fFqow@mail.gmail.com>
--001a114d7312e2a5ee0524f0abe2
Content-Type: multipart/alternative; boundary=001a114d7312e2a5e60524f0abe0

--001a114d7312e2a5e60524f0abe0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

I find that some GIFs set an invalid value as transparent index such as
image->colors+1.

However,

        /*
          Read local colormap.
        */
        colormap=3DMagickAllocateMemory(unsigned char *,3*image->colors);
        if (colormap =3D=3D (unsigned char *) NULL)
          {
            MagickFreeMemory(global_colormap);
            ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
                                 image);
          }
        if (ReadBlob(image,3*image->colors,(char *) colormap) !=3D
3*image->colors)    // <-------  BUG
      {
        MagickFreeMemory(global_colormap);
        MagickFreeMemory(colormap);
        ThrowReaderException(CorruptImageError,InsufficientImageDataInFile,=
image);
      }

=E2=80=8B

--001a114d7312e2a5e60524f0abe0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"markdown-here-wrapper" style=3D""><p style=
=3D"margin:1.2em 0px!important">I find that some GIFs set an invalid value =
as transparent index such as image-&gt;colors+1. </p>
<p style=3D"margin:1.2em 0px!important">However,</p>
<pre style=3D"font-size:0.85em;font-family:Consolas,Inconsolata,Courier,mon=
ospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style=3D"fon=
t-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px=
 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234=
,234);border-radius:3px;display:inline;background-color:rgb(248,248,248);wh=
ite-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,=
204);padding:0.5em 0.7em;display:block!important">        /*
          Read local colormap.
        */
        colormap=3DMagickAllocateMemory(unsigned char *,3*image-&gt;colors)=
;
        if (colormap =3D=3D (unsigned char *) NULL)
          {
            MagickFreeMemory(global_colormap);
            ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,
                                 image);
          }
        if (ReadBlob(image,3*image-&gt;colors,(char *) colormap) !=3D 3*ima=
ge-&gt;colors)    // &lt;-------  BUG
      {
        MagickFreeMemory(global_colormap);
        MagickFreeMemory(colormap);
        ThrowReaderException(CorruptImageError,InsufficientImageDataInFile,=
image);
      }
</code></pre><div title=3D"MDH:SSBmaW5kIHRoYXQgc29tZSBHSUZzIHNldCBhbiBpbnZh=
bGlkIHZhbHVlIGFzIHRyYW5zcGFyZW50
IGluZGV4IHN1Y2ggYXMgaW1hZ2UtJmd0O2NvbG9ycysxLsKgPGRpdj48YnI+PC9kaXY+PGRpdj5=
I
b3dldmVyLDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+YGBgPC9kaXY+PGRpdj48ZGl2PiZuYnN=
w
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAvKjwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDs=
g
Jm5ic3A7ICZuYnNwOyBSZWFkIGxvY2FsIGNvbG9ybWFwLjwvZGl2PjxkaXY+Jm5ic3A7ICZuYnN=
w
OyAmbmJzcDsgJm5ic3A7ICovPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs=
g
Y29sb3JtYXA9TWFnaWNrQWxsb2NhdGVNZW1vcnkodW5zaWduZWQgY2hhciAqLDMqaW1hZ2UtJmd=
0
O2NvbG9ycyk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgaWYgKGNvbG9=
y
bWFwID09ICh1bnNpZ25lZCBjaGFyICopIE5VTEwpPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZ=
u
YnNwOyAmbmJzcDsgJm5ic3A7IHs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnN=
w
OyAmbmJzcDsgJm5ic3A7IE1hZ2lja0ZyZWVNZW1vcnkoZ2xvYmFsX2NvbG9ybWFwKTs8L2Rpdj4=
8
ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFRocm93UmVhZGV=
y
RXhjZXB0aW9uKFJlc291cmNlTGltaXRFcnJvcixNZW1vcnlBbGxvY2F0aW9uRmFpbGVkLDwvZGl=
2
PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZ=
u
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5=
i
c3A7ICZuYnNwO2ltYWdlKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA=
m
bmJzcDsgfTwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGlmIChSZWFkQmx=
v
YihpbWFnZSwzKmltYWdlLSZndDtjb2xvcnMsKGNoYXIgKikgY29sb3JtYXApICE9IDMqaW1hZ2U=
t
Jmd0O2NvbG9ycykgJm5ic3A7ICZuYnNwOy8vICZsdDstLS0tLS0tICZuYnNwO0JVRzwvZGl2Pjx=
k
aXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgezwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDs=
g
Jm5ic3A7IE1hZ2lja0ZyZWVNZW1vcnkoZ2xvYmFsX2NvbG9ybWFwKTs8L2Rpdj48ZGl2PiZuYnN=
w
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBNYWdpY2tGcmVlTWVtb3J5KGNvbG9ybWFwKTs8L2Rpdj4=
8
ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBUaHJvd1JlYWRlckV4Y2VwdGlvbihDb3J=
y
dXB0SW1hZ2VFcnJvcixJbnN1ZmZpY2llbnRJbWFnZURhdGFJbkZpbGUsaW1hZ2UpOzwvZGl2Pjx=
k
aXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgfTwvZGl2PjwvZGl2PjxkaXY+YGBgPC9kaXY+PGRpdj4=
8
YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+" s=
tyle=3D"height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size=
:0em;padding:0;margin:0">=E2=80=8B</div></div></div>

--001a114d7312e2a5e60524f0abe0--
--001a114d7312e2a5ee0524f0abe2
Content-Type: application/octet-stream; name="code_gif.patch"
Content-Disposition: attachment; filename="code_gif.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ih74f1it0

LS0tIEdyYXBoaWNzTWFnaWNrLTEuMy4yMS9vbGQtY29kZXJzL2dpZi5jCTIwMTUtMDMtMDEgMDQ6
NTE6NTguMDAwMDAwMDAwICswODAwCisrKyBHcmFwaGljc01hZ2ljay0xLjMuMjEvY29kZXJzL2dp
Zi5jCTIwMTUtMTEtMjAgMTE6MzY6MDUuNDI4NzkzODIyICswODAwCkBAIC04NTMsNiArODUzLDcg
QEAKICAgICBkZWxheSwKICAgICBkaXNwb3NlLAogICAgIGdsb2JhbF9jb2xvcnMsCisgICAgbG9j
YWxfY29sb3JzLAogICAgIGltYWdlX2NvdW50LAogICAgIGl0ZXJhdGlvbnM7CiAKQEAgLTEwMDcs
NyArMTAwOCwxNCBAQAogICAgIGltYWdlLT5kZXB0aD04OwogICAgIGZsYWc9UmVhZEJsb2JCeXRl
KGltYWdlKTsKICAgICBpbWFnZS0+aW50ZXJsYWNlPUJpdFNldChmbGFnLDB4NDApID8gTGluZUlu
dGVybGFjZSA6IE5vSW50ZXJsYWNlOwotICAgIGltYWdlLT5jb2xvcnM9IUJpdFNldChmbGFnLDB4
ODApID8gZ2xvYmFsX2NvbG9ycyA6IDB4MDFVIDw8ICgoZmxhZyAmIDB4MDcpKzEpOworICAgIC8q
CisgICAgICogV29ya0Fyb3VuZDoKKyAgICAgKiBJbiBzb21lIEdJRiBpbWFnZXMgdHJhbnNwYXJl
bnQgY29sb3IgaW5kZXggaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBsb2NhbCBjb2xvcnMKKyAg
ICAgKiBhbmQgdGhpcyBpbmRleCBpcyBpbnZhbGlkIG9idmlvdXNseS4gTW9yZW92ZXIsIGl0IHdp
bGwgY2F1c2UgY29ycnVwdCBpbWFnZSB3aGVuIGFsbG9jYXRpbmcKKyAgICAgKiBsb2NhbF9jb2xv
cnMrMSBjb2xvcm1hcCBlbnRyaWVzLiBTbyB3ZSBuZWVkIHRvIHdvcmsgYXJvdW5kLgorICAgICAq
CisgICAgICogKi8KKyAgICBsb2NhbF9jb2xvcnM9aW1hZ2UtPmNvbG9ycz0hQml0U2V0KGZsYWcs
MHg4MCkgPyBnbG9iYWxfY29sb3JzIDogMHgwMVUgPDwgKChmbGFnICYgMHgwNykrMSk7CiAgICAg
aWYgKG9wYWNpdHkgPj0gKGxvbmcpIGltYWdlLT5jb2xvcnMpCiAgICAgICBpbWFnZS0+Y29sb3Jz
PW9wYWNpdHkrMTsKICAgICBpbWFnZS0+cGFnZS53aWR0aD1wYWdlLndpZHRoOwpAQCAtMTA2NCw3
ICsxMDcyLDcgQEAKICAgICAgICAgICAgIFRocm93UmVhZGVyRXhjZXB0aW9uKFJlc291cmNlTGlt
aXRFcnJvcixNZW1vcnlBbGxvY2F0aW9uRmFpbGVkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW1hZ2UpOwogICAgICAgICAgIH0KLSAgICAgICAgaWYgKFJlYWRCbG9iKGltYWdl
LDMqaW1hZ2UtPmNvbG9ycywoY2hhciAqKSBjb2xvcm1hcCkgIT0gMyppbWFnZS0+Y29sb3JzKQor
ICAgICAgICBpZiAoUmVhZEJsb2IoaW1hZ2UsMypsb2NhbF9jb2xvcnMsKGNoYXIgKikgY29sb3Jt
YXApICE9IDMqbG9jYWxfY29sb3JzKQogCSAgewogCSAgICBNYWdpY2tGcmVlTWVtb3J5KGdsb2Jh
bF9jb2xvcm1hcCk7CiAJICAgIE1hZ2lja0ZyZWVNZW1vcnkoY29sb3JtYXApOwo=
--001a114d7312e2a5ee0524f0abe2
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

------------------------------------------------------------------------------

--001a114d7312e2a5ee0524f0abe2
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Graphicsmagick-bugs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/graphicsmagick-bugs

--001a114d7312e2a5ee0524f0abe2--