From ffe107c8c07b32934b795f3e12d70e479060a3bc Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Fri, 18 May 2001 18:34:49 +0000 Subject: [PATCH] Unicode fixes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10215 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/imagxpm.cpp | 8 ++++++-- src/common/xpmdecod.cpp | 15 ++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/common/imagxpm.cpp b/src/common/imagxpm.cpp index 39689e1f5f..19ae615e70 100644 --- a/src/common/imagxpm.cpp +++ b/src/common/imagxpm.cpp @@ -128,12 +128,16 @@ bool wxXPMHandler::SaveFile(wxImage * image, chars_per_pixel++; // 2. write the header: - tmp.Printf("/* XPM */\n" + char tmpbuf[200]; + // VS: 200b is safe upper bound for anything produced by sprintf bellow + // (101 bytes the string, neither %i can expand into more than 10 chars) + sprintf(tmpbuf, + "/* XPM */\n" "static char *xpm_data[] = {\n" "/* columns rows colors chars-per-pixel */\n" "\"%i %i %i %i\",\n", image->GetWidth(), image->GetHeight(), cols, chars_per_pixel); - stream.Write(tmp.mb_str(), tmp.Length()); + stream.Write(tmpbuf, strlen(tmpbuf)); // 3. create color symbols table: wxHashTable table(wxKEY_INTEGER); diff --git a/src/common/xpmdecod.cpp b/src/common/xpmdecod.cpp index 3b33170ab7..8d35786503 100644 --- a/src/common/xpmdecod.cpp +++ b/src/common/xpmdecod.cpp @@ -641,8 +641,8 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data) wxImage img; int count; unsigned width, height, colors_cnt, chars_per_pixel; - unsigned i, j; - char key[64]; + size_t i, j, i_key; + wxChar key[64]; const char *clr_def; bool hasMask; wxXPMColourMapData *clr_data; @@ -669,7 +669,7 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data) if ( !img.Ok() ) return img; img.SetMask(FALSE); - key[chars_per_pixel] = '\0'; + key[chars_per_pixel] = wxT('\0'); hasMask = FALSE; clr_tbl.DeleteContents(TRUE); @@ -678,7 +678,8 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data) */ for (i = 0; i < colors_cnt; i++) { - memcpy(key, xpm_data[1 + i], chars_per_pixel); + for (i_key = 0; i_key < chars_per_pixel; i_key++) + key[i_key] = (wxChar)xpm_data[1 + i][i_key]; clr_def = ParseColor(xpm_data[1 + i]); clr_data = new wxXPMColourMapData; @@ -725,9 +726,9 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data) { for (i = 0; i < width; i++, img_data += 3) { - memcpy(key, - xpm_data[1 + colors_cnt + j] + chars_per_pixel * i, - chars_per_pixel); + for (i_key = 0; i_key < chars_per_pixel; i_key++) + key[i_key] = (wxChar)xpm_data[1 + colors_cnt + j] + [chars_per_pixel * i + i_key]; clr_data = (wxXPMColourMapData*) clr_tbl.Get(key); if ( clr_data == NULL ) { -- 2.45.2