Fixed mutiple possible null-pointer derefences #63
authorFelix Morgner <felix.morgner@gmail.com>
Mon, 6 Jul 2015 09:20:34 +0000 (11:20 +0200)
committerFelix Morgner <felix.morgner@gmail.com>
Mon, 6 Jul 2015 09:20:34 +0000 (11:20 +0200)
src/channel.c
src/messagehandler.c
src/server.c

index 3a5fac02c41ffc70032798e7da3ca49ab870b8d9..fdf4e82df9acab3a9597b56b5449d13508068b23 100644 (file)
@@ -221,8 +221,10 @@ void Chan_init()
                                          chlink.destination);
                else
                        ch_dst = ch_itr;
-               
+
                chl = malloc(sizeof(channellist_t));
+               if(!chl)
+                       Log_fatal("Out of memory");
                chl->chan = ch_dst;
                init_list_entry(&chl->node);
                list_add_tail(&chl->node, &ch_src->channel_links);
@@ -381,6 +383,8 @@ void Chan_buildTreeList(channel_t *ch, struct dlist *head)
        channel_t *sub;
 
        chl = malloc(sizeof(channellist_t));
+       if(!chl)
+               Log_fatal("Out of memory");
        chl->chan = ch;
        init_list_entry(&chl->node);
        list_add_tail(&chl->node, head);
index 6adcf774dd1de57863a02f7a41091cf24970a528..e93afb99ab488ad894dfd45fe8dc3a26f300455b 100644 (file)
@@ -285,6 +285,9 @@ void Mh_handle_message(client_t *client, message_t *msg)
                                sendmsg->payload.channelState->n_links = ch_itr->linkcount;
 
                                links = (uint32_t *)malloc(ch_itr->linkcount * sizeof(uint32_t));
+                               if(!links)
+                                       Log_fatal("Out of memory");
+
                                list_iterate(itr, &ch_itr->channel_links) { /* Iterate links */
                                        channellist_t *chl;
                                        channel_t *ch;
index 1a586324b0af1dbc1bc9dc09327efe811929ea7d..f584f7fc3496577ed2adf123d6ce717c49c8342e 100644 (file)
@@ -73,7 +73,7 @@ void checkIPversions()
        testsocket = socket(PF_INET6, SOCK_STREAM, 0);
        hasv6 = (errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) ? false : true;
        if (!(testsocket < 0)) close(testsocket);
-       
+
        if(!hasv4)
        {
                Log_info("IPv4 is not supported by this system");
@@ -95,11 +95,18 @@ void checkIPversions()
 struct sockaddr_storage** Server_setupAddressesAndPorts()
 {
        struct sockaddr_storage** addresses = calloc(2, sizeof(void*));
+       if(!addresses)
+               Log_fatal("Not enough memory to allocate addresses");
 
        struct sockaddr_storage* v4address = calloc(1, sizeof(struct sockaddr_storage));
        v4address->ss_family = AF_INET;
+       if(!v4address)
+               Log_fatal("Not enough memory to allocate IPv4 address");
+
        struct sockaddr_storage* v6address = calloc(1, sizeof(struct sockaddr_storage));
        v6address->ss_family = AF_INET6;
+       if(!v4address)
+               Log_fatal("Not enough memory to allocate IPv6 address");
 
 #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
        v4address->ss_len = sizeof(struct sockaddr_storage);