Fixed usage of uninitialized memory, thax to valgrind
authorAndreas Eversberg <jolly@eversberg.eu>
Tue, 31 Oct 2017 05:16:09 +0000 (06:16 +0100)
committerAndreas Eversberg <jolly@eversberg.eu>
Tue, 31 Oct 2017 05:16:09 +0000 (06:16 +0100)
callerid.c
mISDN.cpp
macro.h
main.c
port.cpp

index 9b31461..2f12ac1 100644 (file)
@@ -45,20 +45,22 @@ const char *numberrize_callerinfo(const char *string, int ntype, const char *nat
 
                case INFO_NTYPE_INTERNATIONAL:
                strcpy(result, international);
 
                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);
                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:
                result[sizeof(result)-1] = '\0';
                return(result);
                break;
 
                default:
-               return(string);
+               strncpy(result, string, sizeof(result)-1);
+               result[sizeof(result)-1] = '\0';
+               return(result);
        }
 }
 
        }
 }
 
index a7facb6..2f3ea03 100644 (file)
--- 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;
 
        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);
        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;
 
        struct mISDN_devinfo devinfo;
        int port = 0, ret;
 
+       memset(&devinfo, 0, sizeof(devinfo));
+
        /* resolve name */
        while (port < cnt) {
                devinfo.id = port;
        /* 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;
 
        struct mISDN_devinfo devinfo;
        unsigned int protocol, prop;
 
+       memset(&devinfo, 0, sizeof(devinfo));
+
        /* check port counts */
        ret = ioctl(mISDNsocket, IMGETCOUNT, &cnt);
        if (ret < 0) {
        /* check port counts */
        ret = ioctl(mISDNsocket, IMGETCOUNT, &cnt);
        if (ret < 0) {
diff --git a/macro.h b/macro.h
index 08c8a9b..8d904df 100644 (file)
--- 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';
                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;
        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 (file)
--- a/main.c
+++ b/main.c
@@ -549,16 +549,16 @@ free:
        debug_count++;
        join_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
 
 #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;
        /* flush messages */
        debug_count++;
        i = 0;
index 32184a8..b6c82d9 100644 (file)
--- 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:
                case CODEC_MONO:
                case CODEC_STEREO:
                case CODEC_8BIT:
+               memset(&dummyheader, 0, sizeof(dummyheader));
                ret = fwrite(dummyheader, sizeof(dummyheader), 1, p_record);
                break;
 
                ret = fwrite(dummyheader, sizeof(dummyheader), 1, p_record);
                break;