From 0eb941e082bcfe3b55f091597534c9bd19579191 Mon Sep 17 00:00:00 2001 From: Steven Franke Date: Sun, 11 Feb 2018 17:29:38 +0000 Subject: [PATCH] Fixed numerous memory leaks in wsprd with the help of valgrind.. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@8492 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- lib/wsprd/wsprd_exp.c | 47 ++++++++++++++++++++++++++------------- lib/wsprd/wsprsim_utils.c | 23 ++++++++++--------- 2 files changed, 44 insertions(+), 26 deletions(-) diff --git a/lib/wsprd/wsprd_exp.c b/lib/wsprd/wsprd_exp.c index af6984714..6d213d80e 100644 --- a/lib/wsprd/wsprd_exp.c +++ b/lib/wsprd/wsprd_exp.c @@ -74,7 +74,7 @@ unsigned long readc2file(char *ptr_to_infile, float *idat, float *qdat, FILE* fp; buffer=malloc(sizeof(float)*2*65536); - memset(buffer,0,sizeof(float)*2*65536); + for (i=0; i<2*65536; i++) buffer[i]=0.0; fp = fopen(ptr_to_infile,"rb"); if (fp == NULL) { @@ -547,13 +547,15 @@ void subtract_signal2(float *id, float *qd, long np, cq=malloc(sizeof(float)*nc2); cfi=malloc(sizeof(float)*nc2); cfq=malloc(sizeof(float)*nc2); - - memset(refi,0,sizeof(float)*nc2); - memset(refq,0,sizeof(float)*nc2); - memset(ci,0,sizeof(float)*nc2); - memset(cq,0,sizeof(float)*nc2); - memset(cfi,0,sizeof(float)*nc2); - memset(cfq,0,sizeof(float)*nc2); + + for (i=0; i 6 ) { @@ -83,8 +83,8 @@ long unsigned int pack_call(char *callsign) { void pack_prefix(char *callsign, int32_t *n, int32_t *m, int32_t *nadd ) { size_t i; char *call6; - call6=malloc(sizeof(char)*6); - memset(call6,32,sizeof(char)*6); + call6=malloc(sizeof(char)*7); + memset(call6,32,sizeof(char)*7); size_t i1=strcspn(callsign,"/"); if( callsign[i1+2] == 0 ) { @@ -142,6 +142,7 @@ void pack_prefix(char *callsign, int32_t *n, int32_t *m, int32_t *nadd ) { *nadd=1; } } + free(call6); } void interleave(unsigned char *sym) @@ -165,7 +166,8 @@ void interleave(unsigned char *sym) } int get_wspr_channel_symbols(char* rawmessage, char* hashtab, unsigned char* symbols) { - int m=0, n=0, ntype=0; + int m=0, ntype=0; + long unsigned int n=0; int i, j, ihash; unsigned char pr3[162]= {1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0, @@ -227,14 +229,14 @@ int get_wspr_channel_symbols(char* rawmessage, char* hashtab, unsigned char* sym ihash=nhash(callsign,strlen(callsign),(uint32_t)146); m=128*ihash + ntype + 64; - char grid6[6]; - memset(grid6,32,sizeof(char)*6); + char grid6[7]; + memset(grid6,0,sizeof(char)*7); j=strlen(grid); for(i=0; i