report error for GIF images without CLEAR code in the stream instead of crashing (patch 1449734)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38512 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
3871d4ca75
commit
1819a5c1ac
@ -467,6 +467,25 @@ int wxGIFDecoder::dgif(GIFImage *img, int interl, int bits)
|
||||
/* make new entry in alphabet (only if NOT just cleared) */
|
||||
if (lastcode != -1)
|
||||
{
|
||||
// Normally, after the alphabet is full and can't grow any
|
||||
// further (ab_free == 4096), encoder should (must?) emit CLEAR
|
||||
// to reset it. This checks whether we really got it, otherwise
|
||||
// the GIF is damaged.
|
||||
if (ab_free > ab_max)
|
||||
{
|
||||
delete[] ab_prefix;
|
||||
delete[] ab_tail;
|
||||
delete[] stack;
|
||||
return wxGIF_INVFORMAT;
|
||||
}
|
||||
|
||||
// This assert seems unnecessary since the condition above
|
||||
// eliminates the only case in which it went false. But I really
|
||||
// don't like being forced to ask "Who in .text could have
|
||||
// written there?!" And I wouldn't have been forced to ask if
|
||||
// this line had already been here.
|
||||
wxASSERT(ab_free < allocSize);
|
||||
|
||||
ab_prefix[ab_free] = lastcode;
|
||||
ab_tail[ab_free] = code;
|
||||
ab_free++;
|
||||
|
Loading…
Reference in New Issue
Block a user