all: improve C++ static analyzers
This commit is contained in:
+2
-5
@@ -66,8 +66,6 @@ static unsigned const EF_ARM_EABI_VER5 = 0x05000000;
|
||||
/*offset 20*/ '.','s','h','s','t','r','t','a','b','\0'
|
||||
};
|
||||
|
||||
// NOLINTBEGIN(clang-analyzer-*)
|
||||
|
||||
static unsigned
|
||||
umin(unsigned a, unsigned b)
|
||||
{
|
||||
@@ -1567,6 +1565,7 @@ PackLinuxElf64::buildLinuxLoader(
|
||||
len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "LZMA_ELF00,LZMA_DEC20,LZMA_DEC30");
|
||||
}
|
||||
len += snprintf(&sec[len], sizeof(sec) - len, ",%s", "EXP_TAIL,SO_TAIL,SO_MAIN");
|
||||
(void)len;
|
||||
addLoader(sec, nullptr);
|
||||
relocateLoader();
|
||||
{
|
||||
@@ -6746,7 +6745,7 @@ void PackLinuxElf32::un_DT_INIT(
|
||||
}
|
||||
}; break;
|
||||
|
||||
case Elf32_Dyn::DT_PLTGOT: { plt_va = dt_pltgot = val;}
|
||||
case Elf32_Dyn::DT_PLTGOT: { plt_va = dt_pltgot = val; (void)dt_pltgot; }
|
||||
// FALL THROUGH
|
||||
case Elf32_Dyn::DT_PREINIT_ARRAY:
|
||||
case Elf32_Dyn::DT_INIT_ARRAY:
|
||||
@@ -8527,6 +8526,4 @@ void PackLinuxElf::unpack(OutputFile * /*fo*/)
|
||||
throwCantUnpack("internal error");
|
||||
}
|
||||
|
||||
// NOLINTEND(clang-analyzer-*)
|
||||
|
||||
/* vim:set ts=4 sw=4 et: */
|
||||
|
||||
@@ -306,9 +306,13 @@ TEST_CASE("MemBuffer global overloads") {
|
||||
mb.clear();
|
||||
mb4.clear();
|
||||
CHECK(memcmp(mb, "\x00", 1) == 0);
|
||||
// NOLINTNEXTLINE(bugprone-unused-return-value)
|
||||
CHECK_THROWS(memcmp(mb, "\x00\x00", 2));
|
||||
// NOLINTNEXTLINE(bugprone-unused-return-value)
|
||||
CHECK_THROWS(memcmp("\x00\x00", mb, 2));
|
||||
// NOLINTNEXTLINE(bugprone-unused-return-value)
|
||||
CHECK_THROWS(memcmp(mb, mb4, 2));
|
||||
// NOLINTNEXTLINE(bugprone-unused-return-value)
|
||||
CHECK_THROWS(memcmp(mb4, mb, 2));
|
||||
CHECK_NOTHROW(memset(mb, 255, 1));
|
||||
CHECK_THROWS(memset(mb, 254, 2));
|
||||
|
||||
+3
-1
@@ -265,7 +265,9 @@ void upx_memswap(void *a, void *b, size_t n) {
|
||||
char *x = (char *) a;
|
||||
char *y = (char *) b;
|
||||
do {
|
||||
char tmp = *x;
|
||||
// strange clang-analyzer-15 false positive when compiling in Debug mode
|
||||
// clang-analyzer-core.uninitialized.Assign
|
||||
char tmp = *x; // NOLINT(*core.uninitialized.Assign) // bogus clang-analyzer warning
|
||||
*x++ = *y;
|
||||
*y++ = tmp;
|
||||
} while (--n != 0);
|
||||
|
||||
+3
-3
@@ -150,9 +150,9 @@ using OwningPointer = T *;
|
||||
|
||||
#else
|
||||
|
||||
// simple class with just a number of no-ops
|
||||
// also works: a simple class with just a number of no-ops
|
||||
template <class T>
|
||||
struct OwningPointer {
|
||||
struct OwningPointer final {
|
||||
static_assert(std::is_class_v<T>); // UPX convention
|
||||
typedef typename std::add_lvalue_reference<T>::type reference;
|
||||
typedef typename std::add_lvalue_reference<const T>::type const_reference;
|
||||
@@ -167,7 +167,7 @@ struct OwningPointer {
|
||||
inline pointer operator->() noexcept { return ptr; }
|
||||
inline const_pointer operator->() const noexcept { return ptr; }
|
||||
};
|
||||
// overload mem_clear()
|
||||
// must overload mem_clear()
|
||||
template <class T>
|
||||
inline void mem_clear(OwningPointer<T> object) noexcept {
|
||||
mem_clear((T *) object);
|
||||
|
||||
Reference in New Issue
Block a user