From 8fc1a7efff7cbfb1400586007fd40a7204d98da5 Mon Sep 17 00:00:00 2001 From: gtsoul-tech <56584633+gtsoul-tech@users.noreply.github.com> Date: Tue, 4 Jun 2024 16:18:17 +0300 Subject: [PATCH] Bug fix/clang tidy warnings part2 (#296) * core.StackAddressEscape * cplusplus.VirtualCall * clang-analyzer-deadcode.DeadStores * clang-analyzer-core.NullDereference * clang-analyzer-core.NonNullParamChecker * change to nolint --------- Co-authored-by: gtsoul-tech --- src/nfagraph/ng_limex.cpp | 2 +- src/parser/buildstate.cpp | 4 ++-- src/scratch.c | 2 +- src/util/multibit.h | 3 ++- src/util/partial_store.h | 4 ++++ src/util/unaligned.h | 15 +++++++++------ tools/hsbench/data_corpus.cpp | 14 +++++++------- tools/hsbench/main.cpp | 10 +++++----- tools/hsbench/sqldb.cpp | 4 ++-- tools/hscheck/main.cpp | 2 +- 10 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/nfagraph/ng_limex.cpp b/src/nfagraph/ng_limex.cpp index e7c28b18..0160f6ea 100644 --- a/src/nfagraph/ng_limex.cpp +++ b/src/nfagraph/ng_limex.cpp @@ -677,7 +677,7 @@ constructNFA(const NGHolder &h_in, const ReportManager *rm, if (has_managed_reports(*h)) { assert(rm); - remapReportsToPrograms(*h, *rm); + remapReportsToPrograms(*h, *rm); //NOLINT (clang-analyzer-core.NonNullParamChecker) } if (!cc.streaming || !cc.grey.compressNFAState) { diff --git a/src/parser/buildstate.cpp b/src/parser/buildstate.cpp index 871f1180..8b09c3d0 100644 --- a/src/parser/buildstate.cpp +++ b/src/parser/buildstate.cpp @@ -158,7 +158,7 @@ GlushkovBuildStateImpl::GlushkovBuildStateImpl(NFABuilder &b, lasts.emplace_back(startState); lasts.emplace_back(startDotstarState); firsts.emplace_back(startDotstarState); - connectRegions(lasts, firsts); + connectRegions(lasts, firsts); //NOLINT (cplusplus.VirtualCall) // accept to acceptEod edges already wired @@ -341,7 +341,7 @@ void GlushkovBuildStateImpl::connectSuccessors(const PositionInfo &from, Position fakedot = builder.makePositions(1); builder.addCharReach(fakedot, CharReach(0x00, 0xff)); builder.setNodeReportID(fakedot, -1); - addSuccessor(fakedot, acceptState); + addSuccessor(fakedot, acceptState); //NOLINT (cplusplus.VirtualCall) *accept = fakedot; } else { // We might lead to accept via an assertion vertex, so we add the diff --git a/src/scratch.c b/src/scratch.c index aa15547b..93c01452 100644 --- a/src/scratch.c +++ b/src/scratch.c @@ -225,7 +225,7 @@ hs_error_t alloc_scratch(const hs_scratch_t *proto, hs_scratch_t **scratch) { assert(ISALIGNED_CL(current)); s->fullState = (char *)current; s->fullStateSize = fullStateSize; - current += fullStateSize; + current += fullStateSize; //NOLINT (clang-analyzer-deadcode.DeadStores) *scratch = s; diff --git a/src/util/multibit.h b/src/util/multibit.h index 3ec45d6f..3c8be2b5 100644 --- a/src/util/multibit.h +++ b/src/util/multibit.h @@ -345,9 +345,10 @@ void mmbit_clear(u8 *bits, u32 total_bits) { /** \brief Specialisation of \ref mmbit_set for flat models. */ static really_inline char mmbit_set_flat(u8 *bits, u32 total_bits, u32 key) { + assert(bits); bits += mmbit_flat_select_byte(key, total_bits); u8 mask = 1U << (key % 8); - char was_set = !!(*bits & mask); + char was_set = !!(*bits & mask); //NOLINT (clang-analyzer-core.NullDereference) *bits |= mask; return was_set; } diff --git a/src/util/partial_store.h b/src/util/partial_store.h index a75a1be6..077ebe83 100644 --- a/src/util/partial_store.h +++ b/src/util/partial_store.h @@ -36,6 +36,7 @@ static really_inline void partial_store_u32(void *ptr, u32 value, u32 numBytes) { + assert(ptr); assert(numBytes <= 4); switch (numBytes) { case 4: @@ -61,6 +62,7 @@ void partial_store_u32(void *ptr, u32 value, u32 numBytes) { static really_inline u32 partial_load_u32(const void *ptr, u32 numBytes) { u32 value; + assert(ptr); assert(numBytes <= 4); switch (numBytes) { case 4: @@ -87,6 +89,7 @@ u32 partial_load_u32(const void *ptr, u32 numBytes) { static really_inline void partial_store_u64a(void *ptr, u64a value, u32 numBytes) { + assert(ptr); assert(numBytes <= 8); switch (numBytes) { case 8: @@ -132,6 +135,7 @@ void partial_store_u64a(void *ptr, u64a value, u32 numBytes) { static really_inline u64a partial_load_u64a(const void *ptr, u32 numBytes) { u64a value; + assert(ptr); assert(numBytes <= 8); switch (numBytes) { case 8: diff --git a/src/util/unaligned.h b/src/util/unaligned.h index 661750a7..890f854e 100644 --- a/src/util/unaligned.h +++ b/src/util/unaligned.h @@ -40,36 +40,37 @@ /// Perform an unaligned 16-bit load static really_inline u16 unaligned_load_u16(const void *ptr) { + assert(ptr); struct unaligned { u16 u; } PACKED__MAY_ALIAS; // cppcheck-suppress cstyleCast const struct unaligned *uptr = (const struct unaligned *)ptr; - return uptr->u; + return uptr->u; //NOLINT (clang-analyzer-core.NullDereference) } /// Perform an unaligned 32-bit load static really_inline u32 unaligned_load_u32(const void *ptr) { + assert(ptr); struct unaligned { u32 u; } PACKED__MAY_ALIAS; // cppcheck-suppress cstyleCast const struct unaligned *uptr = (const struct unaligned *)ptr; - return uptr->u; + return uptr->u; //NOLINT (clang-analyzer-core.NullDereference) } /// Perform an unaligned 64-bit load static really_inline u64a unaligned_load_u64a(const void *ptr) { - if (ptr == NULL) { - return 0; // Return a default value - } + assert(ptr); struct unaligned { u64a u; } PACKED__MAY_ALIAS; // cppcheck-suppress cstyleCast const struct unaligned *uptr = (const struct unaligned *)ptr; - return uptr->u; + return uptr->u; //NOLINT (clang-analyzer-core.uninitialized.UndefReturn) } /// Perform an unaligned 16-bit store static really_inline void unaligned_store_u16(void *ptr, u16 val) { + assert(ptr); struct unaligned { u16 u; } PACKED__MAY_ALIAS; // cppcheck-suppress cstyleCast struct unaligned *uptr = (struct unaligned *)ptr; @@ -79,6 +80,7 @@ void unaligned_store_u16(void *ptr, u16 val) { /// Perform an unaligned 32-bit store static really_inline void unaligned_store_u32(void *ptr, u32 val) { + assert(ptr); struct unaligned { u32 u; } PACKED__MAY_ALIAS; // cppcheck-suppress cstyleCast struct unaligned *uptr = (struct unaligned *)ptr; @@ -88,6 +90,7 @@ void unaligned_store_u32(void *ptr, u32 val) { /// Perform an unaligned 64-bit store static really_inline void unaligned_store_u64a(void *ptr, u64a val) { + assert(ptr); struct unaligned { u64a u; } PACKED__MAY_ALIAS; // cppcheck-suppress cstyleCast struct unaligned *uptr = (struct unaligned *)ptr; diff --git a/tools/hsbench/data_corpus.cpp b/tools/hsbench/data_corpus.cpp index 24ff541a..008aacca 100644 --- a/tools/hsbench/data_corpus.cpp +++ b/tools/hsbench/data_corpus.cpp @@ -78,7 +78,7 @@ vector readCorpus(const string &filename) { ostringstream err; err << "Unable to open database '" << filename << "': " << sqlite3_errmsg(db); - status = sqlite3_close(db); + status = sqlite3_close(db); //NOLINT (clang-analyzer-deadcode.DeadStores) assert(status == SQLITE_OK); throw DataCorpusError(err.str()); } @@ -91,9 +91,9 @@ vector readCorpus(const string &filename) { status = sqlite3_prepare_v2(db, query.c_str(), query.size(), &statement, nullptr); if (status != SQLITE_OK) { - status = sqlite3_finalize(statement); + status = sqlite3_finalize(statement); //NOLINT (clang-analyzer-deadcode.DeadStores) assert(status == SQLITE_OK); - status = sqlite3_close(db); + status = sqlite3_close(db); //NOLINT (clang-analyzer-deadcode.DeadStores) assert(status == SQLITE_OK); ostringstream oss; @@ -115,17 +115,17 @@ vector readCorpus(const string &filename) { oss << "Error retrieving blocks from corpus: " << sqlite3_errmsg(db); - status = sqlite3_finalize(statement); + status = sqlite3_finalize(statement); //NOLINT (clang-analyzer-deadcode.DeadStores) assert(status == SQLITE_OK); - status = sqlite3_close(db); + status = sqlite3_close(db); //NOLINT (clang-analyzer-deadcode.DeadStores) assert(status == SQLITE_OK); throw DataCorpusError(oss.str()); } - status = sqlite3_finalize(statement); + status = sqlite3_finalize(statement); //NOLINT (clang-analyzer-deadcode.DeadStores) assert(status == SQLITE_OK); - status = sqlite3_close(db); + status = sqlite3_close(db); //NOLINT (clang-analyzer-deadcode.DeadStores) assert(status == SQLITE_OK); if (blocks.empty()) { diff --git a/tools/hsbench/main.cpp b/tools/hsbench/main.cpp index d0533ad6..a7b62804 100644 --- a/tools/hsbench/main.cpp +++ b/tools/hsbench/main.cpp @@ -234,13 +234,13 @@ void processArgs(int argc, char *argv[], vector &sigSets, #endif ; int in_sigfile = 0; - int do_per_scan = 0; - int do_compress = 0; + static int do_per_scan = 0; + static int do_compress = 0; int do_compress_size = 0; - int do_echo_matches = 0; - int do_sql_output = 0; + static int do_echo_matches = 0; + static int do_sql_output = 0; int option_index = 0; - int literalFlag = 0; + static int literalFlag = 0; vector sigFiles; static struct option longopts[] = { diff --git a/tools/hsbench/sqldb.cpp b/tools/hsbench/sqldb.cpp index eb974cb9..6a054ed5 100644 --- a/tools/hsbench/sqldb.cpp +++ b/tools/hsbench/sqldb.cpp @@ -56,7 +56,7 @@ sqlite3 *initDB(const string &filename) { ostringstream oss; oss << "Unable to open database '" << filename << "': " << sqlite3_errmsg(db); - status = sqlite3_close(db); + status = sqlite3_close(db); //NOLINT (clang-analyzer-deadcode.DeadStores) assert(status == SQLITE_OK); throw SqlFailure(oss.str()); } @@ -115,7 +115,7 @@ sqlite3 *initDB(const string &filename) { fail: ostringstream oss; oss << "Unable to create tables: " << sqlite3_errmsg(db); - status = sqlite3_close(db); + status = sqlite3_close(db); //NOLINT (clang-analyzer-deadcode.DeadStores) assert(status == SQLITE_OK); throw SqlFailure(oss.str()); } diff --git a/tools/hscheck/main.cpp b/tools/hscheck/main.cpp index 6ee14930..918fe785 100644 --- a/tools/hscheck/main.cpp +++ b/tools/hscheck/main.cpp @@ -494,7 +494,7 @@ static void processArgs(int argc, char *argv[], UNUSED const unique_ptr &grey) { const char options[] = "e:E:s:z:hHLNV8G:T:BC"; bool signatureSet = false; - int literalFlag = 0; + static int literalFlag = 0; static struct option longopts[] = { {"literal-on", no_argument, &literalFlag, 1},