From c09bbc54f00780db7920db3f2f1014dc51be4db8 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 11 Jan 2016 23:49:00 -0500 Subject: [PATCH] added checks after mallocs in several files --- src/bitdht/bdnode.cc | 7 +++++++ src/bitdht/bencode.c | 26 ++++++++++++++++++++++++++ src/udp/udplayer.cc | 12 +++++++++++- src/util/bdbloom.cc | 14 ++++++++++++++ 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/bitdht/bdnode.cc b/src/bitdht/bdnode.cc index 9161c69..a994db4 100644 --- a/src/bitdht/bdnode.cc +++ b/src/bitdht/bdnode.cc @@ -2399,6 +2399,13 @@ bdNodeNetMsg::bdNodeNetMsg(char *msg, int len, struct sockaddr_in *in_addr) :data(NULL), mSize(len), addr(*in_addr) { data = (char *) malloc(len); + + if(data == NULL) + { + std::cerr << "(EE) " << __PRETTY_FUNCTION__ << ": ERROR. cannot allocate memory for " << len << " bytes." << std::endl; + return ; + } + memcpy(data, msg, len); //print(std::cerr); } diff --git a/src/bitdht/bencode.c b/src/bitdht/bencode.c index 2a486da..4678677 100644 --- a/src/bitdht/bencode.c +++ b/src/bitdht/bencode.c @@ -20,6 +20,7 @@ */ #include +#include #include /* malloc() realloc() free() strtoll() */ #include /* memset() */ #include "util/bdstring.h" @@ -111,6 +112,13 @@ static char *_be_decode_str(const char **data, long long *data_len) if (**data == ':') { char *_ret = (char *) malloc(sizeof(sllen) + len + 1); + + if(_ret == NULL) + { + std::cerr << "(EE) " << __PRETTY_FUNCTION__ << ": ERROR. cannot allocate memory for " << len+1+sizeof(sllen) << " bytes." << std::endl; + return NULL; + } + memcpy(_ret, &sllen, sizeof(sllen)); ret = _ret + sizeof(sllen); memcpy(ret, *data + 1, len); @@ -500,6 +508,12 @@ be_node *be_create_str(const char *str) int len = strlen(str); long long int sllen = len; char *_ret = (char *) malloc(sizeof(sllen) + len + 1); + + if(_ret == NULL) + { + std::cerr << "(EE) " << __PRETTY_FUNCTION__ << ": ERROR. cannot allocate memory for " << len+1+sizeof(sllen) << " bytes." << std::endl; + return NULL; + } char *ret = NULL; memcpy(_ret, &sllen, sizeof(sllen)); @@ -519,6 +533,12 @@ be_node *be_create_str_wlen(const char *str, int len) /* not including \0 */ be_node *n = be_alloc(BE_STR); long long int sllen = len; char *_ret = (char *) malloc(sizeof(sllen) + len + 1); + + if(_ret == NULL) + { + std::cerr << "(EE) " << __PRETTY_FUNCTION__ << ": ERROR. cannot allocate memory for " << len+1+sizeof(sllen) << " bytes." << std::endl; + return NULL; + } char *ret = NULL; memcpy(_ret, &sllen, sizeof(sllen)); @@ -561,6 +581,12 @@ int be_add_keypair(be_node *dict, const char *str, be_node *node) int len = strlen(str); long long int sllen = len; char *_ret = (char *) malloc(sizeof(sllen) + len + 1); + + if(_ret == NULL) + { + std::cerr << "(EE) " << __PRETTY_FUNCTION__ << ": ERROR. cannot allocate memory for " << len+1+sizeof(sllen) << " bytes." << std::endl; + return 0; + } char *ret = NULL; //fprintf(stderr, "be_add_keypair() key len = %d\n",len); diff --git a/src/udp/udplayer.cc b/src/udp/udplayer.cc index 71dfd4f..db048b8 100644 --- a/src/udp/udplayer.cc +++ b/src/udp/udplayer.cc @@ -66,7 +66,11 @@ class udpPacket :raddr(*addr), len(dlen) { data = malloc(len); - memcpy(data, dta, len); + + if(data != NULL) + memcpy(data, dta, len); + else + std::cerr << "(EE) error in memory allocation in " << __PRETTY_FUNCTION__ << std::endl; } ~udpPacket() @@ -242,6 +246,12 @@ void UdpLayer::recv_loop() int maxsize = 16000; void *inbuf = malloc(maxsize); + if(inbuf == NULL) + { + std::cerr << "(EE) Error in memory allocation of size " << maxsize << " in " << __PRETTY_FUNCTION__ << std::endl; + return ; + } + int status; struct timeval timeout; diff --git a/src/util/bdbloom.cc b/src/util/bdbloom.cc index 1d6566d..36f3a3b 100644 --- a/src/util/bdbloom.cc +++ b/src/util/bdbloom.cc @@ -100,6 +100,13 @@ int bloomFilter::setFilterBits(const std::string &hex) // convert to binary array. uint8_t *tmparray = (uint8_t *) malloc(bytes); + + if(tmparray == NULL) + { + std::cerr << "(EE) Error. Cannot allocate memory for " << bytes << " bytes in " << __PRETTY_FUNCTION__ << std::endl; + return 0; + } + uint32_t i = 0; for(i = 0; i < bytes; i++) @@ -139,6 +146,13 @@ std::string bloomFilter::getFilter() // convert to binary array. uint8_t *tmparray = (uint8_t *) malloc(bytes); + + if(tmparray == NULL) + { + std::cerr << "(EE) Error. Cannot allocate memory for " << bytes << " bytes in " << __PRETTY_FUNCTION__ << std::endl; + return std::string(); + } + int i,j; for(i = 0; i < bytes; i++)