]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/quantize.cpp
fixing overrelease and out-of-bounds write, fixes #13725
[wxWidgets.git] / src / common / quantize.cpp
index b89425443b09312c0db78989249839a05b4b178e..cbd53cc46838d09712fa128776cccb38ff4409fd 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        quantize.cpp
+// Name:        src/common/quantize.cpp
 // Purpose:     wxQuantize implementation
 // Author:      Julian Smart
 // Modified by:
 // Purpose:     wxQuantize implementation
 // Author:      Julian Smart
 // Modified by:
 
 /* modified by Vaclav Slavik for use as jpeglib-independent module */
 
 
 /* modified by Vaclav Slavik for use as jpeglib-independent module */
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "quantize.h"
-#endif
-
 // For compilers that support precompilation, includes "wx/wx.h".
 #include "wx/wxprec.h"
 
 // For compilers that support precompilation, includes "wx/wx.h".
 #include "wx/wxprec.h"
 
 #pragma hdrstop
 #endif
 
 #pragma hdrstop
 #endif
 
-#ifndef WX_PRECOMP
-    #include "wx/palette.h"
-#endif
-
 #if wxUSE_IMAGE
 
 #if wxUSE_IMAGE
 
-#include "wx/image.h"
 #include "wx/quantize.h"
 
 #include "wx/quantize.h"
 
+#ifndef WX_PRECOMP
+    #include "wx/palette.h"
+    #include "wx/image.h"
+#endif
+
 #ifdef __WXMSW__
 #ifdef __WXMSW__
-#include "wx/msw/private.h"
+    #include "wx/msw/private.h"
 #endif
 
 #include <stdlib.h>
 #endif
 
 #include <stdlib.h>
@@ -77,7 +73,9 @@
 
 typedef unsigned short UINT16;
 typedef signed short INT16;
 
 typedef unsigned short UINT16;
 typedef signed short INT16;
+#if !(defined(__WATCOMC__) && (defined(__WXMSW__) || defined(__WXMOTIF__)))
 typedef signed int INT32;
 typedef signed int INT32;
+#endif
 
 typedef unsigned char JSAMPLE;
 typedef JSAMPLE *JSAMPROW;
 
 typedef unsigned char JSAMPLE;
 typedef JSAMPLE *JSAMPROW;
@@ -1548,7 +1546,7 @@ bool wxQuantize::Quantize(const wxImage& src, wxImage& dest,
 
     if (flags & wxQUANTIZE_FILL_DESTINATION_IMAGE)
     {
 
     if (flags & wxQUANTIZE_FILL_DESTINATION_IMAGE)
     {
-        if (!dest.Ok())
+        if (!dest.IsOk())
             dest.Create(w, h);
 
         imgdt = dest.GetData();
             dest.Create(w, h);
 
         imgdt = dest.GetData();
@@ -1569,7 +1567,7 @@ bool wxQuantize::Quantize(const wxImage& src, wxImage& dest,
             // We need to shift the palette entries up
             // to make room for the Windows system colours.
             for (i = 0; i < w * h; i++)
             // We need to shift the palette entries up
             // to make room for the Windows system colours.
             for (i = 0; i < w * h; i++)
-                data8bit[i] = data8bit[i] + paletteShift;
+                data8bit[i] = (unsigned char)(data8bit[i] + paletteShift);
         }
 #endif
         *eightBitData = data8bit;
         }
 #endif
         *eightBitData = data8bit;
@@ -1623,7 +1621,9 @@ bool wxQuantize::Quantize(const wxImage& src, wxImage& dest,
         delete[] g;
         delete[] b;
     }
         delete[] g;
         delete[] b;
     }
-#endif // wxUSE_PALETTE
+#else // !wxUSE_PALETTE
+    wxUnusedVar(pPalette);
+#endif // wxUSE_PALETTE/!wxUSE_PALETTE
 
     return true;
 }
 
     return true;
 }
@@ -1654,4 +1654,3 @@ bool wxQuantize::Quantize(const wxImage& src,
 
 #endif
     // wxUSE_IMAGE
 
 #endif
     // wxUSE_IMAGE
-