From 187c916d1a9776c70a80c170370675dca46be415 Mon Sep 17 00:00:00 2001 From: Taylor Richards Date: Tue, 9 Feb 2010 11:11:53 +0000 Subject: [PATCH] various valgrind warning fixes --- include/bmpman.h | 2 +- src/bmpman/bmpman.cpp | 7 ++++++- src/freespace2/unixmain.cpp | 36 +++++++++++++++++------------------ src/graphics/font.cpp | 4 ++++ src/graphics/gropengl.cpp | 4 +--- src/platform/unix.cpp | 11 +++++------ src/playerman/managepilot.cpp | 5 ++++- 7 files changed, 39 insertions(+), 30 deletions(-) diff --git a/include/bmpman.h b/include/bmpman.h index edda9bd..ecae27d 100644 --- a/include/bmpman.h +++ b/include/bmpman.h @@ -199,7 +199,7 @@ int bm_load_duplicate(const char *filename); // On success, it returns the bitmap number. You cannot // free that RAM until bm_release is called on that bitmap. // See example at bottom of this file -int bm_create( int bpp, int w, int h, void * data, int flags = 0); +int bm_create( int bpp, int w, int h, void *data = NULL, int flags = 0); // Frees up a bitmap's data, but bitmap number 'n' can // still be used, it will just have to be paged in next diff --git a/src/bmpman/bmpman.cpp b/src/bmpman/bmpman.cpp index 7d632a9..0e2a72e 100644 --- a/src/bmpman/bmpman.cpp +++ b/src/bmpman/bmpman.cpp @@ -843,10 +843,15 @@ void bm_calc_sections(bitmap *be) // bpp you can pass in is 32 or 8. On success, it returns the // bitmap number. You cannot free that RAM until bm_release // is called on that bitmap. -int bm_create( int bpp, int w, int h, void * data, int flags ) +int bm_create( int bpp, int w, int h, void *data, int flags ) { int i, n, first_slot = MAX_BITMAPS; + if (data == NULL) { + Int3(); + return -1; + } + // Assert((bpp==32)||(bpp==8)); if(bpp != 16){ Assert(flags & BMP_AABITMAP); diff --git a/src/freespace2/unixmain.cpp b/src/freespace2/unixmain.cpp index f5ee280..549ecda 100644 --- a/src/freespace2/unixmain.cpp +++ b/src/freespace2/unixmain.cpp @@ -17,7 +17,7 @@ void vm_dump(); int main(int argc, char **argv) { - char userdir[MAX_PATH]; + char userdir[MAX_PATH] = { 0 }; #if defined(__APPLE__) && !defined(MACOSX) strcpy( full_path, *argv ); @@ -29,26 +29,26 @@ int main(int argc, char **argv) char *argptr = NULL; int i; - int len = 1; - - argptr = (char *)malloc(1); - *argptr = 0; - + int len = 0; + for (i = 1; i < argc; i++) { - int oldlen = len-1; - - len += strlen(argv[i])+1; - - argptr = (char *)realloc(argptr, len); - if (argptr == NULL) { - fprintf(stderr, "ERROR: out of memory in main!\n"); - exit(1); - } - - strcpy(argptr+oldlen, argv[i]); + len += strlen(argv[i]) + 1; + } + + argptr = (char *)malloc(len+5); + + if (argptr == NULL) { + fprintf(stderr, "ERROR: out of memory in main!\n"); + exit(1); + } + + memset(argptr, 0, len+5); + + for (i = 1; i < argc; i++) { + strcat(argptr, argv[i]); strcat(argptr, " "); } - + int retr = WinMain(1, 0, argptr, 0); free(argptr); diff --git a/src/graphics/font.cpp b/src/graphics/font.cpp index 7e7efa2..3af51d7 100644 --- a/src/graphics/font.cpp +++ b/src/graphics/font.cpp @@ -928,6 +928,10 @@ int gr_create_font(const char * typeface) fnt->bm_u = (int *)malloc(sizeof(int)*fnt->num_chars); fnt->bm_v = (int *)malloc(sizeof(int)*fnt->num_chars); + memset(fnt->bm_data, 0, fnt->bm_w * fnt->bm_h); + memset(fnt->bm_u, 0, sizeof(int) * fnt->num_chars); + memset(fnt->bm_v, 0, sizeof(int) * fnt->num_chars); + int i,x,y; x = y = 0; for (i=0; inum_chars; i++ ) { diff --git a/src/graphics/gropengl.cpp b/src/graphics/gropengl.cpp index 16542cb..30dea0b 100644 --- a/src/graphics/gropengl.cpp +++ b/src/graphics/gropengl.cpp @@ -419,7 +419,7 @@ volatile int GL_deactivate = 0; static int GL_use_luminance_alpha; static int FSAA; -static ubyte GL_xlat[256]; +static ubyte GL_xlat[256] = { 0 }; static char *Gr_saved_screen = NULL; static int Gr_saved_screen_bitmap; @@ -1929,8 +1929,6 @@ static void opengl_tcache_init (int use_sections) } } - memset(GL_xlat, 0, 256); - GL_texture_sections = use_sections; GL_last_detail = Detail.hardware_textures; diff --git a/src/platform/unix.cpp b/src/platform/unix.cpp index e0a4f7e..7f88b80 100644 --- a/src/platform/unix.cpp +++ b/src/platform/unix.cpp @@ -73,9 +73,8 @@ int WSAGetLastError() int _mkdir(const char *path) { int status = 1; // if we don't ever call mkdir() to update this then assume we are in error - char *c, tmp_path[MAX_PATH]; + char *c, tmp_path[MAX_PATH] = { 0 }; - memset(tmp_path, 0, MAX_PATH); strncpy(tmp_path, path, MAX_PATH-1); c = &tmp_path[1]; @@ -314,22 +313,22 @@ void outwnd_close() */ void Warning( const char * filename, int line, const char * format, ... ) { - char tmp[MAX_LINE_WIDTH*4]; + char tmp[MAX_LINE_WIDTH*4] = { 0 }; va_list args; va_start (args, format); - vsprintf (tmp, format, args); + vsnprintf (tmp, sizeof(tmp), format, args); va_end(args); fprintf (stderr, "Warning: (%s:%d): %s\n", filename, line, tmp); } void Error( const char * filename, int line, const char * format, ... ) { - char tmp[MAX_LINE_WIDTH*4]; + char tmp[MAX_LINE_WIDTH*4] = { 0 }; va_list args; va_start (args, format); - vsprintf (tmp, format, args); + vsnprintf (tmp, sizeof(tmp), format, args); va_end(args); fprintf (stderr, "Error: (%s:%d): %s\n", filename, line, tmp); exit (1); diff --git a/src/playerman/managepilot.cpp b/src/playerman/managepilot.cpp index 8e99370..9e038a3 100644 --- a/src/playerman/managepilot.cpp +++ b/src/playerman/managepilot.cpp @@ -1443,7 +1443,10 @@ void player_set_squad_bitmap(player *p, const char *fname) p->insignia_texture = -1; // try and set the new one - strncpy(p->squad_filename, fname, MAX_FILENAME_LEN); + if (fname != p->squad_filename) { + strncpy(p->squad_filename, fname, MAX_FILENAME_LEN); + } + if(strlen(p->squad_filename) > 0){ p->insignia_texture = bm_load_duplicate(fname); -- 2.39.2