From cdca6a713587f88a357147569dd5b2103923ad72 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Tue, 31 Oct 2017 06:16:09 +0100 Subject: [PATCH] Fixed usage of uninitialized memory, thax to valgrind --- callerid.c | 8 +++++--- mISDN.cpp | 6 ++++++ macro.h | 2 ++ main.c | 10 +++++----- port.cpp | 1 + 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/callerid.c b/callerid.c index 9b31461..2f12ac1 100644 --- a/callerid.c +++ b/callerid.c @@ -45,20 +45,22 @@ const char *numberrize_callerinfo(const char *string, int ntype, const char *nat case INFO_NTYPE_INTERNATIONAL: strcpy(result, international); - strncat(result, string, sizeof(result)-strlen(result)-1); + strncat(result, string, sizeof(result)-1); result[sizeof(result)-1] = '\0'; return(result); break; case INFO_NTYPE_NATIONAL: strcpy(result, national); - strncat(result, string, sizeof(result)-strlen(result)-1); + strncat(result, string, sizeof(result)-1); result[sizeof(result)-1] = '\0'; return(result); break; default: - return(string); + strncpy(result, string, sizeof(result)-1); + result[sizeof(result)-1] = '\0'; + return(result); } } diff --git a/mISDN.cpp b/mISDN.cpp index a7facb6..2f3ea03 100644 --- a/mISDN.cpp +++ b/mISDN.cpp @@ -405,6 +405,8 @@ static int _bchannel_create(struct mISDNport *mISDNport, int i) int ret; struct sockaddr_mISDN addr; + memset(&addr, 0, sizeof(addr)); + if (mISDNport->b_sock[i].inuse) { PERROR("Error: Socket already created for index %d\n", i); return(0); @@ -1817,6 +1819,8 @@ int mISDN_getportbyname(int sock, int cnt, char *portname) struct mISDN_devinfo devinfo; int port = 0, ret; + memset(&devinfo, 0, sizeof(devinfo)); + /* resolve name */ while (port < cnt) { devinfo.id = port; @@ -1892,6 +1896,8 @@ struct mISDNport *mISDNport_open(struct interface_port *ifport) struct mISDN_devinfo devinfo; unsigned int protocol, prop; + memset(&devinfo, 0, sizeof(devinfo)); + /* check port counts */ ret = ioctl(mISDNsocket, IMGETCOUNT, &cnt); if (ret < 0) { diff --git a/macro.h b/macro.h index 08c8a9b..8d904df 100644 --- a/macro.h +++ b/macro.h @@ -115,6 +115,8 @@ static inline char *_getline(char *buffer, int size, FILE *fp) return buffer; if (buffer[strlen(buffer)-1] == '\n') buffer[strlen(buffer)-1] = '\0'; + if (!buffer[0]) + return buffer; if (buffer[strlen(buffer)-1] == '\r') buffer[strlen(buffer)-1] = '\0'; return buffer; diff --git a/main.c b/main.c index b1f3ee7..5c13f17 100644 --- a/main.c +++ b/main.c @@ -549,16 +549,16 @@ free: debug_count++; join_free(); - /* free interfaces */ - if (interface_first) - free_interfaces(interface_first); - interface_first = NULL; - #ifdef WITH_MISDN /* close isdn ports */ mISDNport_close_all(); #endif + /* free interfaces */ + if (interface_first) + free_interfaces(interface_first); + interface_first = NULL; + /* flush messages */ debug_count++; i = 0; diff --git a/port.cpp b/port.cpp index 32184a8..b6c82d9 100644 --- a/port.cpp +++ b/port.cpp @@ -768,6 +768,7 @@ int Port::open_record(int type, int vbox, int skip, char *extension, int anon_ig case CODEC_MONO: case CODEC_STEREO: case CODEC_8BIT: + memset(&dummyheader, 0, sizeof(dummyheader)); ret = fwrite(dummyheader, sizeof(dummyheader), 1, p_record); break; -- 2.13.6