-
Notifications
You must be signed in to change notification settings - Fork 37.7k
Closed
BlockPo/BlockPo-to-Tradelayer
#385Description
When extending the test/fuzz/integer
fuzzer I noticed the following UBSan warning when fuzzing abs64(...)
:
runtime error: negation of -9223372036854775808 cannot be represented in type 'int64_t' (aka 'long'); cast to an unsigned type to negate this value to itself
Fuzzing harness:
diff --git a/src/test/fuzz/integer.cpp b/src/test/fuzz/integer.cpp
index 35d6804d4..bc158e5a2 100644
--- a/src/test/fuzz/integer.cpp
+++ b/src/test/fuzz/integer.cpp
@@ -40,6 +40,8 @@
#include <set>
#include <vector>
void initialize()
{
SelectParams(CBaseChainParams::REGTEST);
@@ -82,6 +84,7 @@ void test_one_input(const std::vector<uint8_t>& buffer)
(void)ComputeMerkleRoot(v256);
(void)CountBits(u64);
(void)DecompressAmount(u64);
+ (void)abs64(i64);
(void)FormatISO8601Date(i64);
(void)FormatISO8601DateTime(i64);
// FormatMoney(i) not defined when i == std::numeric_limits<int64_t>::min()
Typically abs(I n)
type functions are not defined when n == std::numeric_limits<I>::min()
so it could be argued that this is expected, but perhaps the function could be rewritten in a way which guarantees that it gives the same behaviour across systems (instead of UB).
Metadata
Metadata
Assignees
Labels
No labels