Fix coverity issues, logically dead code and error checking (#16618)
Stelios Fragkakis committed
Dec 17, 2023 at 23:02 UTC
1e345dfca9f72ee5b4b8f314de2ccb04f49be188
1 file changed
+15
-20
libnetdata/log/log.c
+15
-20
@@ -1431,10 +1431,7 @@ static int64_t log_field_to_int64(struct log_field *lf) {
1431
break;
1432
1433
case NDFT_CALLBACK:
1434
- if(!tmp)
1435
- tmp = buffer_create(0, NULL);
1436
- else
1437
- buffer_flush(tmp);
1434
+ tmp = buffer_create(0, NULL);
1435
1436
if(lf->entry.cb.formatter(tmp, lf->entry.cb.formatter_data))
1437
s = buffer_tostring(tmp);
@@ -1495,10 +1492,7 @@ static uint64_t log_field_to_uint64(struct log_field *lf) {
1492
break;
1493
1494
case NDFT_CALLBACK:
1498
- if(!tmp)
1499
- tmp = buffer_create(0, NULL);
1500
- else
1501
- buffer_flush(tmp);
1495
+ tmp = buffer_create(0, NULL);
1496
1497
if(lf->entry.cb.formatter(tmp, lf->entry.cb.formatter_data))
1498
s = buffer_tostring(tmp);
@@ -1513,7 +1507,7 @@ static uint64_t log_field_to_uint64(struct log_field *lf) {
1507
return lf->entry.i64;
1508
1509
case NDFT_DBL:
1516
- return lf->entry.dbl;
1510
+ return (uint64_t) lf->entry.dbl;
1511
}
1512
1513
if(s && *s)
@@ -1753,31 +1747,32 @@ static bool nd_logger_journal_libsystemd(struct log_field *fields, size_t fields
1747
1748
const char *key = fields[i].journal;
1749
char *value = NULL;
1750
+ int rc = 0;
1751
switch (fields[i].entry.type) {
1752
case NDFT_TXT:
1753
if(*fields[i].entry.txt)
1759
- asprintf(&value, "%s=%s", key, fields[i].entry.txt);
1754
+ rc = asprintf(&value, "%s=%s", key, fields[i].entry.txt);
1755
break;
1756
case NDFT_STR:
1762
- asprintf(&value, "%s=%s", key, string2str(fields[i].entry.str));
1757
+ rc = asprintf(&value, "%s=%s", key, string2str(fields[i].entry.str));
1758
break;
1759
case NDFT_BFR:
1760
if(buffer_strlen(fields[i].entry.bfr))
1766
- asprintf(&value, "%s=%s", key, buffer_tostring(fields[i].entry.bfr));
1761
+ rc = asprintf(&value, "%s=%s", key, buffer_tostring(fields[i].entry.bfr));
1762
break;
1763
case NDFT_U64:
1769
- asprintf(&value, "%s=%" PRIu64, key, fields[i].entry.u64);
1764
+ rc = asprintf(&value, "%s=%" PRIu64, key, fields[i].entry.u64);
1765
break;
1766
case NDFT_I64:
1772
- asprintf(&value, "%s=%" PRId64, key, fields[i].entry.i64);
1767
+ rc = asprintf(&value, "%s=%" PRId64, key, fields[i].entry.i64);
1768
break;
1769
case NDFT_DBL:
1775
- asprintf(&value, "%s=%f", key, fields[i].entry.dbl);
1770
+ rc = asprintf(&value, "%s=%f", key, fields[i].entry.dbl);
1771
break;
1772
case NDFT_UUID: {
1773
char u[UUID_COMPACT_STR_LEN];
1774
uuid_unparse_lower_compact(*fields[i].entry.uuid, u);
1780
- asprintf(&value, "%s=%s", key, u);
1775
+ rc = asprintf(&value, "%s=%s", key, u);
1776
}
1777
break;
1778
case NDFT_CALLBACK: {
@@ -1786,15 +1781,15 @@ static bool nd_logger_journal_libsystemd(struct log_field *fields, size_t fields
1781
else
1782
buffer_flush(tmp);
1783
if(fields[i].entry.cb.formatter(tmp, fields[i].entry.cb.formatter_data))
1789
- asprintf(&value, "%s=%s", key, buffer_tostring(tmp));
1784
+ rc = asprintf(&value, "%s=%s", key, buffer_tostring(tmp));
1785
}
1786
break;
1787
default:
1793
- asprintf(&value, "%s=%s", key, "UNHANDLED");
1788
+ rc = asprintf(&value, "%s=%s", key, "UNHANDLED");
1789
break;
1790
}
1791
1797
- if (value) {
1792
+ if (rc != -1 && value) {
1793
iov[iov_count].iov_base = value;
1794
iov[iov_count].iov_len = strlen(value);
1795
iov_count++;
@@ -1921,7 +1916,7 @@ static bool nd_logger_journal_direct(struct log_field *fields, size_t fields_max
1916
// ----------------------------------------------------------------------------
1917
// syslog logger - uses logfmt
1918
1924
-static bool nd_logger_syslog(int priority, ND_LOG_FORMAT format, struct log_field *fields, size_t fields_max) {
1919
+static bool nd_logger_syslog(int priority, ND_LOG_FORMAT format __maybe_unused, struct log_field *fields, size_t fields_max) {
1920
CLEAN_BUFFER *wb = buffer_create(1024, NULL);
1921
1922
nd_logger_logfmt(wb, fields, fields_max);