allow reading GIFs with incorrectly specified animation size (closes #9465)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60028 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-04-05 12:31:54 +00:00
parent 24a5629aed
commit 3b8ec767b9
2 changed files with 25 additions and 3 deletions

View File

@@ -518,6 +518,7 @@ All (GUI):
- Added wxGetSelectedChoices() replacing wxGetMultipleChoices() (Kolya Kosenko).
- Check whether document fits into page horizontally in wxHtmlPrintout, see the
new CheckFit() method for more information.
- Allow reading GIFs with incorrectly specified animation size.
wxGTK:

View File

@@ -757,9 +757,30 @@ wxGIFErrorCode wxGIFDecoder::LoadGIF(wxInputStream& stream)
pimg->w = buf[4] + 256 * buf[5];
pimg->h = buf[6] + 256 * buf[7];
if ( anim && ((pimg->w == 0) || (pimg->w > (unsigned int)m_szAnimation.GetWidth()) ||
(pimg->h == 0) || (pimg->h > (unsigned int)m_szAnimation.GetHeight())) )
return wxGIF_INVFORMAT;
if ( anim )
{
// some GIF images specify incorrect animation size but we can
// still open them if we fix up the animation size, see #9465
if ( m_nFrames == 0 )
{
if ( pimg->w > (unsigned)m_szAnimation.x )
m_szAnimation.x = pimg->w;
if ( pimg->h > (unsigned)m_szAnimation.y )
m_szAnimation.y = pimg->h;
}
else // subsequent frames
{
// check that we have valid size
if ( (!pimg->w || pimg->w > (unsigned)m_szAnimation.x) ||
(!pimg->h || pimg->h > (unsigned)m_szAnimation.y) )
{
wxLogError(_("Incorrect GIF frame size (%u, %d) for "
"the frame #%u"),
pimg->w, pimg->h, m_nFrames);
return wxGIF_INVFORMAT;
}
}
}
interl = ((buf[8] & 0x40)? 1 : 0);
size = pimg->w * pimg->h;