]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/xpmdecod.cpp
fixed memory leak in Submit(cmd, false) (bug 1037115)
[wxWidgets.git] / src / common / xpmdecod.cpp
index 358131f241f007791e9f37f1ae8b7be32905fc12..18597dd3c17c161df68cadf86f0090ff2ebbde79 100644 (file)
@@ -178,7 +178,10 @@ wxImage wxXPMDecoder::ReadFile(wxInputStream& stream)
             if ( (*q == '*') && (*(q + 1) == '/') )
                 break;
         }
             if ( (*q == '*') && (*(q + 1) == '/') )
                 break;
         }
-        strcpy(p, q + 2);
+
+        // memmove allows overlaps (unlike strcpy):
+        size_t cpylen = strlen(q + 2) + 1;
+        memmove(p, q + 2, cpylen);
     }
 
     /*
     }
 
     /*
@@ -673,7 +676,7 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
     /*
      *  Read hints and initialize structures:
      */
     /*
      *  Read hints and initialize structures:
      */
-     
+
     count = sscanf(xpm_data[0], "%u %u %u %u",
                    &width, &height, &colors_cnt, &chars_per_pixel);
     if ( count != 4 || width * height * colors_cnt == 0 )
     count = sscanf(xpm_data[0], "%u %u %u %u",
                    &width, &height, &colors_cnt, &chars_per_pixel);
     if ( count != 4 || width * height * colors_cnt == 0 )
@@ -759,7 +762,7 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data)
     unsigned char *img_data = img.GetData();
     wxXPMColourMap::iterator entry;
     wxXPMColourMap::iterator end = clr_tbl.end();
     unsigned char *img_data = img.GetData();
     wxXPMColourMap::iterator entry;
     wxXPMColourMap::iterator end = clr_tbl.end();
-    
+
     for (j = 0; j < height; j++)
     {
         for (i = 0; i < width; i++, img_data += 3)
     for (j = 0; j < height; j++)
     {
         for (i = 0; i < width; i++, img_data += 3)