Author: manolo
Date: 2011-05-12 01:07:27 -0700 (Thu, 12 May 2011)
New Revision: 8656
Log:
Fix STR #2625: removed memory leak after reading erroneous PNG data.

Modified:
   branches/branch-1.3/src/Fl_PNG_Image.cxx

Modified: branches/branch-1.3/src/Fl_PNG_Image.cxx
===================================================================
--- branches/branch-1.3/src/Fl_PNG_Image.cxx    2011-05-11 19:15:12 UTC (rev 
8655)
+++ branches/branch-1.3/src/Fl_PNG_Image.cxx    2011-05-12 08:07:27 UTC (rev 
8656)
@@ -123,14 +123,23 @@
   if (!from_memory) {
     if ((fp = fl_fopen(name_png, "rb")) == NULL) return;
   }
+  else name_png = "In-memory PNG data";
 
   // Setup the PNG data structures...
-  pp   = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-  info = png_create_info_struct(pp);
-
+  pp = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+  if (pp) info = png_create_info_struct(pp);
+  if (!pp || !info) {
+    if (pp) png_destroy_read_struct(&pp, NULL, NULL);
+    if (!from_memory) fclose(fp);
+    Fl::warning("Cannot allocate memory to read PNG file or data \"%s\".\n", 
name_png);
+    return;
+  }
+  
   if (setjmp(png_jmpbuf(pp)))
   {
-    Fl::warning("PNG file \"%s\" contains errors!\n", name_png);
+    png_destroy_read_struct(&pp, &info, NULL);
+    if (!from_memory) fclose(fp);
+    Fl::warning("PNG file or data \"%s\" contains errors!\n", name_png);
     return;
   }
 

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to