GraphicsMagick: coders/wpg.c Fix loop end to, 256 insert "Palett...

GraphicsMagick Commits <[email protected]> Fri, 20 Oct 2023 11:51:52 -0500
Newsgroups gmane.comp.video.graphicsmagick.cvs
Message-ID <mailman.10287.1697820729.1370.graphicsmagick-commit@lists.sourceforge.net>
changeset 58b0460d650a in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=58b0460d650a
summary: coders/wpg.c Fix loop end to, 256 insert "Palette" chunk header to debug log.

diffstat:

 ChangeLog    |   4 ++++
 coders/wpg.c |  18 ++++++++++++------
 2 files changed, 16 insertions(+), 6 deletions(-)

diffs (70 lines):

diff -r 3f829d7af6ff -r 58b0460d650a ChangeLog
--- a/ChangeLog	Fri Oct 20 10:13:37 2023 +0200
+++ b/ChangeLog	Fri Oct 20 18:51:24 2023 +0200
@@ -1,3 +1,7 @@
+2023-10-19  Fojtik Jaroslav  <[email protected]>
+	coders/wpg.c Fix loop end to 256 insert "Palette" chunk header
+	to debug log.
+
 2023-10-19  Fojtik Jaroslav  <[email protected]>
 	coders/wpg.c Fix for potentiall access to uninitialised
 	object "Palette".
diff -r 3f829d7af6ff -r 58b0460d650a coders/wpg.c
--- a/coders/wpg.c	Fri Oct 20 10:13:37 2023 +0200
+++ b/coders/wpg.c	Fri Oct 20 18:51:24 2023 +0200
@@ -1208,8 +1208,8 @@
 
   typedef struct
   {
-    unsigned int StartIndex;
-    unsigned int NumOfEntries;
+    magick_uint16_t StartIndex;
+    magick_uint16_t NumOfEntries;
   } WPGColorMapRec;
 
   /*
@@ -1265,7 +1265,7 @@
   magick_off_t FilePos, filesize;
 
   unsigned char *pPalette = NULL;
-  unsigned char PaletteItems = 0;
+  magick_uint16_t PaletteItems = 0;
   //unsigned char PaletteStartIDX = 0;
 
   tCTM CTM;         /*current transform matrix*/
@@ -1401,6 +1401,10 @@
             case 0x0E:  /*Color palette */
               WPG_Palette.StartIndex=ReadBlobLSBShort(image);
               WPG_Palette.NumOfEntries=ReadBlobLSBShort(image);
+              if(logging) (void)LogMagickEvent(CoderEvent,GetMagickModule(),
+                       "WPG Color palette:\n"
+                       "    StartIndex=%u\n"
+                       "    NumOfEntries=%u\n", (unsigned)WPG_Palette.StartIndex, (unsigned)WPG_Palette.NumOfEntries);
 
               PaletteItems = WPG_Palette.NumOfEntries;
               if(pPalette==NULL)
@@ -1408,7 +1412,7 @@
                 pPalette = MagickAllocateResourceLimitedMemory(unsigned char *,(size_t)3*256);
                 if(pPalette==NULL)
                     ThrowReaderException(ResourceLimitError,MemoryAllocationFailed,image);
-                for(i=0; i<255; i++)
+                for(i=0; i<=255; i++)
                 {
                   pPalette[3*i] = WPG1_Palette[i].Red;
                   pPalette[3*i+1] = WPG1_Palette[i].Green;
@@ -1471,11 +1475,13 @@
 
               if(pPalette!=NULL && PaletteItems>0)
               {
-                image->colors = PaletteItems; /*WPG_Palette.NumOfEntries;*/
+                image->colors = 1 << bpp;
+                if(PaletteItems < image->colors)
+                    image->colors = PaletteItems; /*WPG_Palette.NumOfEntries;*/
                 if (!AllocateImageColormap(image,image->colors))
                   goto NoMemory;
                 image->storage_class = PseudoClass;
-                for (i=0; i<(int)PaletteItems; i++)
+                for (i=0; i<image->colors; i++)
                 {
                   image->colormap[i].red = ScaleCharToQuantum(pPalette[3*i]);
                   image->colormap[i].green=ScaleCharToQuantum(pPalette[3*i+1]);