X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1ab88038785eb2d6a7f89129a506826bf6887cc6..8a07956565ddccd1720abf4e510945593128d774:/src/gtk/animate.cpp diff --git a/src/gtk/animate.cpp b/src/gtk/animate.cpp index 02e2886873..1975fcf5d0 100644 --- a/src/gtk/animate.cpp +++ b/src/gtk/animate.cpp @@ -116,7 +116,8 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) else loader = gdk_pixbuf_loader_new(); - if (!loader) + if (!loader || + error != NULL) // even if the loader was allocated, an error could have happened { wxLogDebug(wxT("Could not create the loader for '%s' animation type: %s"), anim_type, error->message); @@ -131,16 +132,21 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) while (stream.IsOk()) { // read a chunk of data - stream.Read(buf, sizeof(buf)); + if (!stream.Read(buf, sizeof(buf)) && + stream.GetLastError() != wxSTREAM_EOF) // EOF is OK for now + { + // gdk_pixbuf_loader_close wants the GError == NULL + gdk_pixbuf_loader_close(loader, NULL); + return false; + } // fetch all data into the loader if (!gdk_pixbuf_loader_write(loader, buf, stream.LastRead(), &error)) { wxLogDebug(wxT("Could not write to the loader: %s"), error->message); - // gdk_pixbuf_loader_close wants the GError == NULL; reset it: - error = NULL; - gdk_pixbuf_loader_close(loader, &error); + // gdk_pixbuf_loader_close wants the GError == NULL + gdk_pixbuf_loader_close(loader, NULL); return false; } @@ -153,7 +159,9 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type) return false; } - // load complete + // load complete: gdk_pixbuf_loader_close will now check if the data we + // wrote inside the pixbuf loader does make sense and will give an error + // if it doesn't (because of a truncated file, corrupted data or whatelse) if (!gdk_pixbuf_loader_close(loader, &error)) { wxLogDebug(wxT("Could not close the loader: %s"), error->message); @@ -355,7 +363,7 @@ void wxAnimationCtrl::DisplayStaticImage() if (m_bmpStaticReal.IsOk()) { // show inactive bitmap - GdkBitmap *mask = (GdkBitmap *) NULL; + GdkBitmap *mask = NULL; if (m_bmpStaticReal.GetMask()) mask = m_bmpStaticReal.GetMask()->GetBitmap();