bugfixes: small issues detected by clang static analyzer 10

This commit is contained in:
Rainer Gerhards 2019-12-10 12:02:02 +01:00
parent 56b1dd06ae
commit deb98fecc1
No known key found for this signature in database
GPG Key ID: 0CB6B2A8BE80B499
14 changed files with 39 additions and 33 deletions

View File

@ -328,15 +328,15 @@ dockerContLogsBufDestruct(docker_cont_logs_buf_t *pThis) {
} }
static rsRetVal static rsRetVal
dockerContLogsBufWrite(docker_cont_logs_buf_t *pThis, const uchar *pdata, size_t write_size) { dockerContLogsBufWrite(docker_cont_logs_buf_t *const pThis, const uchar *const pdata, const size_t write_size) {
DEFiRet; DEFiRet;
imdocker_buf_t *mem = pThis->buf; imdocker_buf_t *const mem = pThis->buf;
if (mem->len + write_size + 1 > mem->data_size) { if (mem->len + write_size + 1 > mem->data_size) {
uchar *pbuf=NULL; uchar *const pbuf = realloc(mem->data, mem->len + write_size + 1);
if ((pbuf = realloc(mem->data, mem->len + write_size + 1)) == NULL) { if(pbuf == NULL) {
LogError(errno, RS_RET_ERR, "%s() - realloc failed!\n", __FUNCTION__); LogError(errno, RS_RET_ERR, "%s() - realloc failed!\n", __FUNCTION__);
return RS_RET_OUT_OF_MEMORY; ABORT_FINALIZE(RS_RET_OUT_OF_MEMORY);
} }
mem->data = pbuf; mem->data = pbuf;
mem->data_size = mem->len+ write_size + 1; mem->data_size = mem->len+ write_size + 1;
@ -352,7 +352,8 @@ dockerContLogsBufWrite(docker_cont_logs_buf_t *pThis, const uchar *pdata, size_t
pThis->bytes_remaining -= write_size; pThis->bytes_remaining -= write_size;
} }
return iRet; finalize_it:
RETiRet;
} }
rsRetVal imdockerReqNew(imdocker_req_t **ppThis) { rsRetVal imdockerReqNew(imdocker_req_t **ppThis) {
@ -739,7 +740,8 @@ dockerContLogReqsPrint(docker_cont_log_instances_t *pThis) {
/* NOTE: not thread safe */ /* NOTE: not thread safe */
static rsRetVal static rsRetVal
dockerContLogReqsAdd(docker_cont_log_instances_t *pThis, dockerContLogReqsAdd(docker_cont_log_instances_t *pThis,
docker_cont_logs_inst_t *pContLogsReqInst) { docker_cont_logs_inst_t *pContLogsReqInst)
{
DEFiRet; DEFiRet;
if (!pContLogsReqInst) { if (!pContLogsReqInst) {
return RS_RET_ERR; return RS_RET_ERR;
@ -753,9 +755,11 @@ dockerContLogReqsAdd(docker_cont_log_instances_t *pThis,
if (!hashtable_insert(pThis->ht_container_log_insts, keyName, pContLogsReqInst)) { if (!hashtable_insert(pThis->ht_container_log_insts, keyName, pContLogsReqInst)) {
ABORT_FINALIZE(RS_RET_ERR); ABORT_FINALIZE(RS_RET_ERR);
} }
keyName = NULL;
} }
} }
finalize_it: finalize_it:
free(keyName);
RETiRet; RETiRet;
} }

View File

@ -1195,7 +1195,7 @@ cache_entry_get(wrkrInstanceData_t *pWrkrData,
*/ */
static rsRetVal static rsRetVal
cache_entry_add(wrkrInstanceData_t *pWrkrData, cache_entry_add(wrkrInstanceData_t *pWrkrData,
int isnsmd, const char *key, struct fjson_object *jso, time_t now) int isnsmd, const char *key, struct fjson_object *jso, time_t now, const int bDupKey)
{ {
DEFiRet; DEFiRet;
struct cache_entry_s *cache_entry = NULL; struct cache_entry_s *cache_entry = NULL;
@ -1205,7 +1205,7 @@ cache_entry_add(wrkrInstanceData_t *pWrkrData,
(void)cache_delete_expired_entries(pWrkrData, isnsmd, now); (void)cache_delete_expired_entries(pWrkrData, isnsmd, now);
CHKmalloc(cache_entry = cache_entry_new(now + pWrkrData->pData->cacheEntryTTL, jso)); CHKmalloc(cache_entry = cache_entry_new(now + pWrkrData->pData->cacheEntryTTL, jso));
if (cache_entry) { if (cache_entry) {
if (!hashtable_insert(ht, (void *)key, cache_entry)) if (!hashtable_insert(ht, (void *)(bDupKey ? strdup(key) : key), cache_entry))
ABORT_FINALIZE(RS_RET_OUT_OF_MEMORY); ABORT_FINALIZE(RS_RET_OUT_OF_MEMORY);
if (isnsmd) { if (isnsmd) {
@ -1239,14 +1239,14 @@ static struct fjson_object *cache_entry_get_nsmd(wrkrInstanceData_t *pWrkrData,
static rsRetVal cache_entry_add_md(wrkrInstanceData_t *pWrkrData, const char *key, static rsRetVal cache_entry_add_md(wrkrInstanceData_t *pWrkrData, const char *key,
struct fjson_object *jso, time_t now) struct fjson_object *jso, time_t now)
{ {
return cache_entry_add(pWrkrData, 0, key, jso, now); return cache_entry_add(pWrkrData, 0, key, jso, now, 0);
} }
/* must be called with cache->cacheMtx held */ /* must be called with cache->cacheMtx held */
static rsRetVal cache_entry_add_nsmd(wrkrInstanceData_t *pWrkrData, const char *key, static rsRetVal cache_entry_add_nsmd(wrkrInstanceData_t *pWrkrData, const char *key,
struct fjson_object *jso, time_t now) struct fjson_object *jso, time_t now)
{ {
return cache_entry_add(pWrkrData, 1, key, jso, now); return cache_entry_add(pWrkrData, 1, key, jso, now, 1);
} }
@ -1925,8 +1925,9 @@ CODESTARTdoAction
} }
if(jNsMeta) { if(jNsMeta) {
if ((iRet = cache_entry_add_nsmd(pWrkrData, strdup(ns), jNsMeta, now))) if ((iRet = cache_entry_add_nsmd(pWrkrData, ns, jNsMeta, now))) {
ABORT_FINALIZE(iRet); ABORT_FINALIZE(iRet);
}
} }
json_object_put(jReply); json_object_put(jReply);
jReply = NULL; jReply = NULL;

View File

@ -1039,7 +1039,9 @@ CODESTARTnewActInst
if (expiration > 0) { if (expiration > 0) {
char buf[40]; char buf[40];
snprintf(buf, 40, "%lld", expiration); snprintf(buf, 40, "%lld", expiration);
#ifndef __clang_analyzer__
pData->expiration = cstring_bytes(strdup(buf)); pData->expiration = cstring_bytes(strdup(buf));
#endif
} }
} else if (!strcmp(actpblk.descr[i].name, "body_template")) { } else if (!strcmp(actpblk.descr[i].name, "body_template")) {
pData->body_template = (uchar*)es_str2cstr(pvals[i].val.d.estr, NULL); pData->body_template = (uchar*)es_str2cstr(pvals[i].val.d.estr, NULL);

View File

@ -2,7 +2,7 @@
* *
* Module begun 2011-07-01 by Rainer Gerhards * Module begun 2011-07-01 by Rainer Gerhards
* *
* Copyright 2011-2018 Rainer Gerhards and Others. * Copyright 2011-2019 Rainer Gerhards and Others.
* *
* This file is part of the rsyslog runtime library. * This file is part of the rsyslog runtime library.
* *
@ -3436,7 +3436,7 @@ initFunc_re_match(struct cnffunc *func)
} }
} else { /* regexp object could not be loaded */ } else { /* regexp object could not be loaded */
parser_errmsg("could not load regex support - regex ignored"); parser_errmsg("could not load regex support - regex ignored");
ABORT_FINALIZE(RS_RET_ERR); ABORT_FINALIZE(localRet);
} }
finalize_it: finalize_it:

View File

@ -598,7 +598,6 @@ int TCPSessGSSRecv(tcps_sess_t *pSess, void *buf, size_t buf_len, ssize_t *piLen
OM_uint32 maj_stat, min_stat; OM_uint32 maj_stat, min_stat;
int fdSess; int fdSess;
int conf_state; int conf_state;
int state;
gss_sess_t *pGSess; gss_sess_t *pGSess;
assert(pSess->pUsr != NULL); assert(pSess->pUsr != NULL);
@ -606,7 +605,7 @@ int TCPSessGSSRecv(tcps_sess_t *pSess, void *buf, size_t buf_len, ssize_t *piLen
pGSess = (gss_sess_t*) pSess->pUsr; pGSess = (gss_sess_t*) pSess->pUsr;
netstrm.GetSock(pSess->pStrm, &fdSess); // TODO: method access, CHKiRet! netstrm.GetSock(pSess->pStrm, &fdSess); // TODO: method access, CHKiRet!
if ((state = gssutil.recv_token(fdSess, &xmit_buf)) <= 0) if(gssutil.recv_token(fdSess, &xmit_buf) <= 0)
ABORT_FINALIZE(RS_RET_GSS_ERR); ABORT_FINALIZE(RS_RET_GSS_ERR);
context = &pGSess->gss_context; context = &pGSess->gss_context;

View File

@ -320,7 +320,6 @@ static rsRetVal ATTR_NONNULL()
checkInstance(instanceConf_t *const inst) checkInstance(instanceConf_t *const inst)
{ {
DEFiRet; DEFiRet;
int nBrokers;
char kafkaErrMsg[1024]; char kafkaErrMsg[1024];
/* main kafka conf */ /* main kafka conf */
@ -431,7 +430,7 @@ checkInstance(instanceConf_t *const inst)
#endif #endif
DBGPRINTF("imkafka: setting brokers: '%s'\n", inst->brokers); DBGPRINTF("imkafka: setting brokers: '%s'\n", inst->brokers);
if((nBrokers = rd_kafka_brokers_add(inst->rk, (char*)inst->brokers)) == 0) { if(rd_kafka_brokers_add(inst->rk, (char*)inst->brokers) == 0) {
if(inst->bReportErrs) { if(inst->bReportErrs) {
LogError(0, RS_RET_KAFKA_NO_VALID_BROKERS, LogError(0, RS_RET_KAFKA_NO_VALID_BROKERS,
"imkafka: no valid brokers specified: %s", inst->brokers); "imkafka: no valid brokers specified: %s", inst->brokers);

View File

@ -350,7 +350,6 @@ static rsRetVal doTryResume(instanceData *pData)
DEFiRet; DEFiRet;
struct addrinfo *res; struct addrinfo *res;
struct addrinfo hints; struct addrinfo hints;
unsigned e;
switch (pData->eDestState) { switch (pData->eDestState) {
case eDestFORW_SUSP: case eDestFORW_SUSP:
@ -369,8 +368,7 @@ static rsRetVal doTryResume(instanceData *pData)
hints.ai_flags = AI_NUMERICSERV; hints.ai_flags = AI_NUMERICSERV;
hints.ai_family = glbl.GetDefPFFamily(); hints.ai_family = glbl.GetDefPFFamily();
hints.ai_socktype = SOCK_STREAM; hints.ai_socktype = SOCK_STREAM;
if((e = getaddrinfo(pData->f_hname, if(getaddrinfo(pData->f_hname, getFwdSyslogPt(pData), &hints, &res) == 0) {
getFwdSyslogPt(pData), &hints, &res)) == 0) {
dbgprintf("%s found, resuming.\n", pData->f_hname); dbgprintf("%s found, resuming.\n", pData->f_hname);
pData->f_addr = res; pData->f_addr = res;
pData->eDestState = eDestFORW; pData->eDestState = eDestFORW;
@ -483,7 +481,6 @@ ENDdoAction
BEGINparseSelectorAct BEGINparseSelectorAct
uchar *q; uchar *q;
int i; int i;
int error;
int bErr; int bErr;
struct addrinfo hints, *res; struct addrinfo hints, *res;
TCPFRAMINGMODE tcp_framing = TCP_FRAMING_OCTET_STUFFING; TCPFRAMINGMODE tcp_framing = TCP_FRAMING_OCTET_STUFFING;
@ -625,7 +622,7 @@ CODE_STD_STRING_REQUESTparseSelectorAct(1)
hints.ai_flags = AI_NUMERICSERV; hints.ai_flags = AI_NUMERICSERV;
hints.ai_family = glbl.GetDefPFFamily(); hints.ai_family = glbl.GetDefPFFamily();
hints.ai_socktype = SOCK_STREAM; hints.ai_socktype = SOCK_STREAM;
if( (error = getaddrinfo(pData->f_hname, getFwdSyslogPt(pData), &hints, &res)) != 0) { if(getaddrinfo(pData->f_hname, getFwdSyslogPt(pData), &hints, &res) != 0) {
pData->eDestState = eDestFORW_UNKN; pData->eDestState = eDestFORW_UNKN;
} else { } else {
pData->eDestState = eDestFORW; pData->eDestState = eDestFORW;

View File

@ -1226,7 +1226,6 @@ static rsRetVal
openKafka(instanceData *const __restrict__ pData) openKafka(instanceData *const __restrict__ pData)
{ {
char errstr[MAX_ERRMSG]; char errstr[MAX_ERRMSG];
int nBrokers = 0;
DEFiRet; DEFiRet;
if(pData->bIsOpen) if(pData->bIsOpen)
@ -1291,7 +1290,7 @@ openKafka(instanceData *const __restrict__ pData)
rd_kafka_conf_set_log_cb(pData->rk, kafkaLogger); rd_kafka_conf_set_log_cb(pData->rk, kafkaLogger);
# endif # endif
DBGPRINTF("omkafka setting brokers: '%s'n", pData->brokers); DBGPRINTF("omkafka setting brokers: '%s'n", pData->brokers);
if((nBrokers = rd_kafka_brokers_add(pData->rk, (char*)pData->brokers)) == 0) { if(rd_kafka_brokers_add(pData->rk, (char*)pData->brokers) == 0) {
LogError(0, RS_RET_KAFKA_NO_VALID_BROKERS, LogError(0, RS_RET_KAFKA_NO_VALID_BROKERS,
"omkafka: no valid brokers specified: %s\n", pData->brokers); "omkafka: no valid brokers specified: %s\n", pData->brokers);
ABORT_FINALIZE(RS_RET_KAFKA_NO_VALID_BROKERS); ABORT_FINALIZE(RS_RET_KAFKA_NO_VALID_BROKERS);

View File

@ -290,9 +290,10 @@ static rsRetVal initConn(instanceData *pData, int bSilent)
int is_sqlite2 = !strcmp((const char *)pData->drvrName, "sqlite"); int is_sqlite2 = !strcmp((const char *)pData->drvrName, "sqlite");
int is_sqlite3 = !strcmp((const char *)pData->drvrName, "sqlite3"); int is_sqlite3 = !strcmp((const char *)pData->drvrName, "sqlite3");
if(is_sqlite2 || is_sqlite3) { if(is_sqlite2 || is_sqlite3) {
char *dn = strdup((char*)pData->dbName); char *const dn_org = strdup((char*)pData->dbName);
dn = dirname(dn); char *const dn = dirname(dn_org);
dbi_conn_set_option(pData->conn, is_sqlite3 ? "sqlite3_dbdir" : "sqlite_dbdir",dn); dbi_conn_set_option(pData->conn, is_sqlite3 ? "sqlite3_dbdir" : "sqlite_dbdir",dn);
free(dn_org); /* Free original buffer - dirname may return different pointer */
char *tmp = strdup((char*)pData->dbName); char *tmp = strdup((char*)pData->dbName);
char *bn = basename(tmp); char *bn = basename(tmp);

View File

@ -367,7 +367,7 @@ UDPSend(wrkrInstanceData_t *pWrkrData, uchar *pszSourcename, char *msg, size_t l
int bSendSuccess; int bSendSuccess;
instanceData *pData; instanceData *pData;
struct sockaddr_in *tempaddr,source_ip; struct sockaddr_in *tempaddr,source_ip;
libnet_ptag_t ip, ipo; libnet_ptag_t ip;
libnet_ptag_t udp; libnet_ptag_t udp;
sbool bNeedUnlock = 0; sbool bNeedUnlock = 0;
/* hdrOffs = fragmentation flags + offset (in bytes) /* hdrOffs = fragmentation flags + offset (in bytes)
@ -387,7 +387,7 @@ UDPSend(wrkrInstanceData_t *pWrkrData, uchar *pszSourcename, char *msg, size_t l
len = 65528; len = 65528;
} }
ip = ipo = udp = 0; ip = udp = 0;
if(pWrkrData->sourcePort++ >= pData->sourcePortEnd){ if(pWrkrData->sourcePort++ >= pData->sourcePortEnd){
pWrkrData->sourcePort = pData->sourcePortStart; pWrkrData->sourcePort = pData->sourcePortStart;
} }

View File

@ -210,7 +210,7 @@ finalize_it:
CODE_STD_FINALIZERnewParserInst CODE_STD_FINALIZERnewParserInst
if(lst != NULL) if(lst != NULL)
cnfparamvalsDestruct(pvals, &parserpblk); cnfparamvalsDestruct(pvals, &parserpblk);
if(iRet != RS_RET_OK) if(iRet != RS_RET_OK && inst != NULL)
freeParserInst(inst); freeParserInst(inst);
ENDnewParserInst ENDnewParserInst

View File

@ -1298,6 +1298,7 @@ finalize_it:
free(pPathBuf); free(pPathBuf);
if(iRet != RS_RET_OK) if(iRet != RS_RET_OK)
abortCnfUse(&pNew); abortCnfUse(&pNew);
free(pNew); /* is NULL again if properly consumed, else clean up */
pthread_mutex_unlock(&mutObjGlobalOp); pthread_mutex_unlock(&mutObjGlobalOp);
RETiRet; RETiRet;
} }

View File

@ -1872,8 +1872,8 @@ DequeueConsumableElements(qqueue_t *const pThis, wti_t *const pWti,
} }
} }
if(keep_running) { if(keep_running) {
keep_running = ((iQueueSize = getLogicalQueueSize(pThis)) > 0 keep_running = (getLogicalQueueSize(pThis) > 0)
&& nDequeued < pThis->iDeqBatchSize); && (nDequeued < pThis->iDeqBatchSize);
} }
} }

View File

@ -1,6 +1,6 @@
/* This is a tool for processing rsyslog encrypted log files. /* This is a tool for processing rsyslog encrypted log files.
* *
* Copyright 2013-2016 Adiscon GmbH * Copyright 2013-2019 Adiscon GmbH
* *
* This file is part of rsyslog. * This file is part of rsyslog.
* *
@ -195,6 +195,7 @@ initCrypt(FILE *eifp)
if((r = eiGetIV(eifp, iv, blkLength)) != 0) goto done; if((r = eiGetIV(eifp, iv, blkLength)) != 0) goto done;
size_t keyLength = gcry_cipher_get_algo_keylen(cry_algo); size_t keyLength = gcry_cipher_get_algo_keylen(cry_algo);
assert(cry_key != NULL); /* "fix" clang 10 static analyzer false positive */
if(strlen(cry_key) != keyLength) { if(strlen(cry_key) != keyLength) {
fprintf(stderr, "invalid key length; key is %u characters, but " fprintf(stderr, "invalid key length; key is %u characters, but "
"exactly %llu characters are required\n", cry_keylen, "exactly %llu characters are required\n", cry_keylen,
@ -526,6 +527,7 @@ main(int argc, char *argv[])
} }
setKey(); setKey();
assert(cry_key != NULL);
if(mode == MD_WRITE_KEYFILE) { if(mode == MD_WRITE_KEYFILE) {
if(optind != argc) { if(optind != argc) {
@ -543,6 +545,7 @@ main(int argc, char *argv[])
} }
} }
assert(cry_key != NULL);
memset(cry_key, 0, cry_keylen); /* zero-out key store */ memset(cry_key, 0, cry_keylen); /* zero-out key store */
cry_keylen = 0; cry_keylen = 0;
return 0; return 0;