]> git.saurik.com Git - wxWidgets.git/commitdiff
check for wxInputStream::Read errors
authorFrancesco Montorsi <f18m_cpp217828@yahoo.it>
Tue, 13 Jan 2009 19:25:32 +0000 (19:25 +0000)
committerFrancesco Montorsi <f18m_cpp217828@yahoo.it>
Tue, 13 Jan 2009 19:25:32 +0000 (19:25 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58082 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/animate.cpp

index 02e2886873af7e874cb8423bb9d6d201f9c74509..e987f0f56808b5c66ce5b6b5079e1c938e7ad37c 100644 (file)
@@ -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,20 @@ 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)))
+        {
+            // 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;
         }