fix some static analyzer warnings in cpp library (#1596)
diff --git a/lib/cpp/src/thrift/server/TThreadedServer.cpp b/lib/cpp/src/thrift/server/TThreadedServer.cpp
index 8a07db9..3fe5aa6 100644
--- a/lib/cpp/src/thrift/server/TThreadedServer.cpp
+++ b/lib/cpp/src/thrift/server/TThreadedServer.cpp
@@ -126,9 +126,11 @@
Synchronized sync(clientMonitor_);
drainDeadClients(); // use the outgoing thread to do some maintenance on our dead client backlog
ClientMap::iterator it = activeClientMap_.find(pClient);
- ClientMap::iterator end = it;
- deadClientMap_.insert(it, ++end);
- activeClientMap_.erase(it);
+ if (it != activeClientMap_.end()) {
+ ClientMap::iterator end = it;
+ deadClientMap_.insert(it, ++end);
+ activeClientMap_.erase(it);
+ }
if (activeClientMap_.empty()) {
clientMonitor_.notify();
}
diff --git a/lib/cpp/src/thrift/transport/TBufferTransports.h b/lib/cpp/src/thrift/transport/TBufferTransports.h
index 0a4cc6d..53d895f 100644
--- a/lib/cpp/src/thrift/transport/TBufferTransports.h
+++ b/lib/cpp/src/thrift/transport/TBufferTransports.h
@@ -455,7 +455,7 @@
assert(owner);
buf = (uint8_t*)std::malloc(size);
if (buf == NULL) {
- throw std::bad_alloc();
+ throw std::bad_alloc();
}
}
diff --git a/lib/cpp/src/thrift/transport/TFileTransport.cpp b/lib/cpp/src/thrift/transport/TFileTransport.cpp
index 4683f95..9c408ac 100644
--- a/lib/cpp/src/thrift/transport/TFileTransport.cpp
+++ b/lib/cpp/src/thrift/transport/TFileTransport.cpp
@@ -383,7 +383,7 @@
while (hasIOError) {
T_ERROR(
- "TFileTransport: writer thread going to sleep for %d microseconds due to IO errors",
+ "TFileTransport: writer thread going to sleep for %u microseconds due to IO errors",
writerThreadIOErrorSleepTime_);
THRIFT_SLEEP_USEC(writerThreadIOErrorSleepTime_);
if (closing_) {
diff --git a/lib/cpp/src/thrift/transport/THttpTransport.cpp b/lib/cpp/src/thrift/transport/THttpTransport.cpp
index 31ae79f..4ccb4d3 100644
--- a/lib/cpp/src/thrift/transport/THttpTransport.cpp
+++ b/lib/cpp/src/thrift/transport/THttpTransport.cpp
@@ -202,10 +202,11 @@
uint32_t avail = httpBufSize_ - httpBufLen_;
if (avail <= (httpBufSize_ / 4)) {
httpBufSize_ *= 2;
- httpBuf_ = (char*)std::realloc(httpBuf_, httpBufSize_ + 1);
- if (httpBuf_ == NULL) {
+ char* tmpBuf = (char*)std::realloc(httpBuf_, httpBufSize_ + 1);
+ if (tmpBuf == NULL) {
throw std::bad_alloc();
}
+ httpBuf_ = tmpBuf;
}
// Read more data
diff --git a/lib/cpp/src/thrift/transport/TNonblockingServerSocket.cpp b/lib/cpp/src/thrift/transport/TNonblockingServerSocket.cpp
index 89073e1..cca52a4 100644
--- a/lib/cpp/src/thrift/transport/TNonblockingServerSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TNonblockingServerSocket.cpp
@@ -212,7 +212,7 @@
if (!path_.empty()) {
serverSocket_ = socket(PF_UNIX, SOCK_STREAM, IPPROTO_IP);
- } else {
+ } else if (res != NULL) {
serverSocket_ = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
}
diff --git a/lib/cpp/src/thrift/transport/TServerSocket.cpp b/lib/cpp/src/thrift/transport/TServerSocket.cpp
index 3179b1a..3f11a59 100644
--- a/lib/cpp/src/thrift/transport/TServerSocket.cpp
+++ b/lib/cpp/src/thrift/transport/TServerSocket.cpp
@@ -288,7 +288,7 @@
if (!path_.empty()) {
serverSocket_ = socket(PF_UNIX, SOCK_STREAM, IPPROTO_IP);
- } else {
+ } else if (res != NULL) {
serverSocket_ = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
}
diff --git a/lib/cpp/src/thrift/transport/TSocketPool.cpp b/lib/cpp/src/thrift/transport/TSocketPool.cpp
index 963c69b..0cec259 100644
--- a/lib/cpp/src/thrift/transport/TSocketPool.cpp
+++ b/lib/cpp/src/thrift/transport/TSocketPool.cpp
@@ -217,7 +217,7 @@
for (int j = 0; j < numRetries_; ++j) {
try {
TSocket::open();
- } catch (TException e) {
+ } catch (const TException &e) {
string errStr = "TSocketPool::open failed " + getSocketInfo() + ": " + e.what();
GlobalOutput(errStr.c_str());
socket_ = THRIFT_INVALID_SOCKET;
diff --git a/lib/cpp/src/thrift/transport/TTransportUtils.cpp b/lib/cpp/src/thrift/transport/TTransportUtils.cpp
index 869b1fa..5a236dc 100644
--- a/lib/cpp/src/thrift/transport/TTransportUtils.cpp
+++ b/lib/cpp/src/thrift/transport/TTransportUtils.cpp
@@ -41,7 +41,11 @@
// Double the size of the underlying buffer if it is full
if (rLen_ == rBufSize_) {
rBufSize_ *= 2;
- rBuf_ = (uint8_t*)std::realloc(rBuf_, sizeof(uint8_t) * rBufSize_);
+ uint8_t *tmpBuf = (uint8_t*)std::realloc(rBuf_, sizeof(uint8_t) * rBufSize_);
+ if (tmpBuf == NULL) {
+ throw std::bad_alloc();
+ }
+ rBuf_ = tmpBuf;
}
// try to fill up the buffer
@@ -73,7 +77,12 @@
while ((len + wLen_) >= newBufSize) {
newBufSize *= 2;
}
- wBuf_ = (uint8_t*)std::realloc(wBuf_, sizeof(uint8_t) * newBufSize);
+ uint8_t *tmpBuf= (uint8_t*)std::realloc(wBuf_, sizeof(uint8_t) * newBufSize);
+ if (tmpBuf == NULL) {
+ throw std::bad_alloc();
+ }
+ wBuf_ = tmpBuf;
+
wBufSize_ = newBufSize;
}
diff --git a/lib/cpp/src/thrift/transport/TTransportUtils.h b/lib/cpp/src/thrift/transport/TTransportUtils.h
index 4e8ce26..f3b4c5a 100644
--- a/lib/cpp/src/thrift/transport/TTransportUtils.h
+++ b/lib/cpp/src/thrift/transport/TTransportUtils.h
@@ -119,7 +119,11 @@
// Double the size of the underlying buffer if it is full
if (rLen_ == rBufSize_) {
rBufSize_ *= 2;
- rBuf_ = (uint8_t*)std::realloc(rBuf_, sizeof(uint8_t) * rBufSize_);
+ uint8_t * tmpBuf = (uint8_t*)std::realloc(rBuf_, sizeof(uint8_t) * rBufSize_);
+ if (tmpBuf == NULL) {
+ throw std::bad_alloc();
+ }
+ rBuf_ = tmpBuf;
}
// try to fill up the buffer