check for wxInputStream::Read errors

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58082 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Francesco Montorsi
2009-01-13 19:25:32 +00:00
parent d8359d3ca0
commit 74be3634b9

View File

@@ -116,7 +116,8 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type)
else else
loader = gdk_pixbuf_loader_new(); 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"), wxLogDebug(wxT("Could not create the loader for '%s' animation type: %s"),
anim_type, error->message); anim_type, error->message);
@@ -131,16 +132,20 @@ bool wxAnimation::Load(wxInputStream &stream, wxAnimationType type)
while (stream.IsOk()) while (stream.IsOk())
{ {
// read a chunk of data // read a chunk of data
stream.Read(buf, sizeof(buf)); if (!stream.Read(buf, sizeof(buf)))
{
// gdk_pixbuf_loader_close wants the GError == NULL
gdk_pixbuf_loader_close(loader, NULL);
return false;
}
// fetch all data into the loader // fetch all data into the loader
if (!gdk_pixbuf_loader_write(loader, buf, stream.LastRead(), &error)) if (!gdk_pixbuf_loader_write(loader, buf, stream.LastRead(), &error))
{ {
wxLogDebug(wxT("Could not write to the loader: %s"), error->message); wxLogDebug(wxT("Could not write to the loader: %s"), error->message);
// gdk_pixbuf_loader_close wants the GError == NULL; reset it: // gdk_pixbuf_loader_close wants the GError == NULL
error = NULL; gdk_pixbuf_loader_close(loader, NULL);
gdk_pixbuf_loader_close(loader, &error);
return false; return false;
} }