]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/xpmdecod.cpp
don't crash on weird line endings like \r\r\n
[wxWidgets.git] / src / common / xpmdecod.cpp
index 04b25527e2789cc278305f2dc1390086120e49eb..709cc6e7dcbace751e0f48afabc8f35e2ee11b28 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        xpmdecod.cpp
+// Name:        src/common/xpmdecod.cpp
 // Purpose:     wxXPMDecoder
 // Author:      John Cristy, Vaclav Slavik
 // RCS-ID:      $Id$
@@ -94,27 +94,25 @@ license is as follows:
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#  pragma hdrstop
+    #pragma hdrstop
 #endif
 
+#if wxUSE_IMAGE && wxUSE_XPM
+
+#include "wx/xpmdecod.h"
+
 #ifndef WX_PRECOMP
-#  include "wx/defs.h"
+    #include "wx/intl.h"
+    #include "wx/log.h"
+    #include "wx/utils.h"
+    #include "wx/hashmap.h"
+    #include "wx/stream.h"
+    #include "wx/image.h"
 #endif
 
-#if wxUSE_IMAGE && wxUSE_XPM
-
-#include "wx/stream.h"
-#include "wx/image.h"
-#include "wx/utils.h"
-#include "wx/log.h"
-#include "wx/hashmap.h"
-#include "wx/intl.h"
 #include <string.h>
-
 #include <ctype.h>
 
-#include "wx/xpmdecod.h"
-
 #if wxUSE_STREAMS
 bool wxXPMDecoder::CanRead(wxInputStream& stream)
 {
@@ -653,11 +651,12 @@ static const char *ParseColor(const char *data)
 
 struct wxXPMColourMapData
 {
+    wxXPMColourMapData() { R = G = B = 0; }
     unsigned char R,G,B;
 };
 WX_DECLARE_STRING_HASH_MAP(wxXPMColourMapData, wxXPMColourMap);
 
-wxImage wxXPMDecoder::ReadData(const char **xpm_data)
+wxImage wxXPMDecoder::ReadData(const char* const* xpm_data)
 {
     wxCHECK_MSG(xpm_data, wxNullImage, wxT("NULL XPM data") );
 
@@ -699,6 +698,7 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
     /*
      *  Create colour map:
      */
+    wxXPMColourMapData clr_data;
     for (i = 0; i < colors_cnt; i++)
     {
         const char *xmpColLine = xpm_data[1 + i];
@@ -711,8 +711,6 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
             return wxNullImage;
         }
 
-        wxXPMColourMapData clr_data;
-
         for (i_key = 0; i_key < chars_per_pixel; i_key++)
             key[i_key] = (wxChar)xmpColLine[i_key];
         clr_def = ParseColor(xmpColLine + chars_per_pixel);