From 6b0229a5466b4bd60bf470c894a30eea9b3e7529 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Tue, 16 May 2017 21:37:00 +0300 Subject: [PATCH] Fix some issues reported by Coverity --- libtransmission/log.c | 3 ++- libtransmission/rpc-server.c | 7 +++++-- libtransmission/variant-benc.c | 4 +++- qt/Session.cc | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/libtransmission/log.c b/libtransmission/log.c index 29c509642..d8bef40d0 100644 --- a/libtransmission/log.c +++ b/libtransmission/log.c @@ -228,7 +228,7 @@ void tr_logAddMessage(char const* file, int line, tr_log_level level, char const if (buf_len < 0) { - return; + goto finish; } #ifdef _WIN32 @@ -302,6 +302,7 @@ void tr_logAddMessage(char const* file, int line, tr_log_level level, char const } } +finish: tr_lockUnlock(getMessageLock()); errno = err; } diff --git a/libtransmission/rpc-server.c b/libtransmission/rpc-server.c index 8b1c5a7c8..dd1f70040 100644 --- a/libtransmission/rpc-server.c +++ b/libtransmission/rpc-server.c @@ -856,6 +856,7 @@ void tr_rpcSetWhitelist(tr_rpc_server* server, char const* whitelistStr) char const* delimiters = " ,;"; size_t const len = strcspn(walk, delimiters); char* token = tr_strndup(walk, len); + tr_list_append(&server->whitelist, token); if (strcspn(token, "+-") < len) @@ -868,12 +869,14 @@ void tr_rpcSetWhitelist(tr_rpc_server* server, char const* whitelistStr) tr_logAddNamedInfo(MY_NAME, "Adding address to whitelist: %s", token); } - if (walk[len] == '\0') + walk += len; + + if (*walk == '\0') { break; } - walk += len + 1; + ++walk; } } diff --git a/libtransmission/variant-benc.c b/libtransmission/variant-benc.c index eff009634..d4b00055b 100644 --- a/libtransmission/variant-benc.c +++ b/libtransmission/variant-benc.c @@ -23,6 +23,8 @@ #include "variant.h" #include "variant-common.h" +#define MAX_BENC_STR_LENGTH (128 * 1024 * 1024) /* arbitrary */ + /*** **** tr_variantParse() **** tr_variantLoad() @@ -115,7 +117,7 @@ int tr_bencParseStr(uint8_t const* buf, uint8_t const* bufend, uint8_t const** s errno = 0; len = strtoul((char const*)buf, &ulend, 10); - if (errno != 0 || ulend != end) + if (errno != 0 || ulend != end || len > MAX_BENC_STR_LENGTH) { goto err; } diff --git a/qt/Session.cc b/qt/Session.cc index bc47069ae..1a710cdf9 100644 --- a/qt/Session.cc +++ b/qt/Session.cc @@ -121,7 +121,7 @@ void Session::portTest() if (r.success) { - tr_variantDictFindBool(r.args.get(), TR_KEY_port_is_open, &isOpen); + (void)tr_variantDictFindBool(r.args.get(), TR_KEY_port_is_open, &isOpen); } emit portTested(isOpen); -- 2.40.0