]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/imagiff.cpp
fixing overrelease and out-of-bounds write, fixes #13725
[wxWidgets.git] / src / common / imagiff.cpp
index 3dd0f7f392bcbc4b8701bb627c0fad48c0e29676..635758c559d8e142c60adab30d62866d76c8865c 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        src/common/imagiff.h
+// Name:        src/common/imagiff.cpp
 // Purpose:     wxImage handler for Amiga IFF images
 // Author:      Steffen Gutmann, Thomas Meyer
 // RCS-ID:      $Id$
@@ -81,7 +81,6 @@ private:
     IFFImage *m_image;        // image data
     wxInputStream *m_f;       // input stream
     unsigned char *databuf;
-    unsigned char *picptr;
     unsigned char *decomp_mem;
 
     void Destroy();
@@ -98,10 +97,10 @@ public:
     // constructor, destructor, etc.
     wxIFFDecoder(wxInputStream *s);
     ~wxIFFDecoder() { Destroy(); }
-    
+
     // NOTE: this function modifies the current stream position
     bool CanRead();
-    
+
     int ReadIFF();
     bool ConvertToImage(wxImage *image) const;
 };
@@ -121,12 +120,9 @@ wxIFFDecoder::wxIFFDecoder(wxInputStream *s)
 
 void wxIFFDecoder::Destroy()
 {
-    delete m_image;
-    m_image = 0;
-    delete [] databuf;
-    databuf = 0;
-    delete [] decomp_mem;
-    decomp_mem = 0;
+    wxDELETE(m_image);
+    wxDELETEA(databuf);
+    wxDELETEA(decomp_mem);
 }
 
 //---------------------------------------------------------------------------
@@ -143,7 +139,7 @@ bool wxIFFDecoder::ConvertToImage(wxImage *image) const
     // create the image
     image->Create(GetWidth(), GetHeight());
 
-    if (!image->Ok())
+    if (!image->IsOk())
         return false;
 
     unsigned char *pal = GetPalette();
@@ -420,8 +416,7 @@ int wxIFFDecoder::ReadIFF()
         const byte *cmapptr = dataptr + 8;
         colors = chunkLen / 3;                  // calc no of colors
 
-        delete m_image->pal;
-        m_image->pal = 0;
+        wxDELETE(m_image->pal);
         m_image->colors = colors;
         if (colors > 0) {
         m_image->pal = new byte[3*colors];
@@ -479,8 +474,7 @@ int wxIFFDecoder::ReadIFF()
         decomprle(bodyptr, decomp_mem, chunkLen, decomp_bufsize);
         bodyptr = decomp_mem;                 // -> uncompressed BODY
         chunkLen = decomp_bufsize;
-        delete [] databuf;
-        databuf = 0;
+        wxDELETEA(databuf);
         }
 
         // the following determines the type of the ILBM file.
@@ -551,7 +545,7 @@ int wxIFFDecoder::ReadIFF()
         }
 
         m_image->p = new byte[bmhd_width * bmhd_height * 3];
-            byte *picptr = m_image->p;
+        byte *picptr = m_image->p;
         if (!picptr) {
         Destroy();
         return wxIFF_MEMERR;