From 4fa1a3edb4e7208b8af190c0c07f03f74f618c05 Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Mon, 8 Aug 2005 02:34:06 +0000 Subject: Fl_GIF_Image did not handle images with an incorrect number of data bits (STR #914) git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4480 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/Fl_GIF_Image.cxx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/Fl_GIF_Image.cxx') diff --git a/src/Fl_GIF_Image.cxx b/src/Fl_GIF_Image.cxx index be8014cf7..5d6fc9af6 100644 --- a/src/Fl_GIF_Image.cxx +++ b/src/Fl_GIF_Image.cxx @@ -175,7 +175,6 @@ Fl_GIF_Image::Fl_GIF_Image(const char *infname) : Fl_Pixmap((char *const*)0) { if (ch&0x80) { // read local color map int n = 2<<(ch&7); - if (n > ColorMapSize) ColorMapSize = n; for (i=0; i < n; i++) { Red[i] = NEXTBYTE; Green[i] = NEXTBYTE; @@ -183,7 +182,6 @@ Fl_GIF_Image::Fl_GIF_Image(const char *infname) : Fl_Pixmap((char *const*)0) { } } CodeSize = NEXTBYTE+1; - break; // okay, this is the image we want } else { Fl::warning("%s: unknown gif code 0x%02x", infname, i); @@ -194,6 +192,13 @@ Fl_GIF_Image::Fl_GIF_Image(const char *infname) : Fl_Pixmap((char *const*)0) { while (blocklen>0) {while (blocklen--) {NEXTBYTE;} blocklen=NEXTBYTE;} } + if (BitsPerPixel >= CodeSize) + { + // Workaround for broken GIF files... + BitsPerPixel = CodeSize - 1; + ColorMapSize = 1 << BitsPerPixel; + } + uchar *Image = new uchar[Width*Height]; int YC = 0, Pass = 0; /* Used to de-interlace the picture */ -- cgit v1.2.3