UBSan warning when fuzzing abs64(...) #20135

issue practicalswift opened this issue on October 12, 2020
  1. practicalswift commented at 7:10 PM on October 12, 2020: contributor

    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).

  2. sipa cross-referenced this on Oct 13, 2020 from issue Avoid the use of abs64 in timedata by sipa
  3. fanquake closed this on Oct 13, 2020

  4. fanquake closed this on Oct 13, 2020

  5. sinetek cross-referenced this on Oct 15, 2020 from issue Avoid the use of abs64 in timedata. by sinetek
  6. Fabcien referenced this in commit f61fd42904 on Nov 12, 2021
  7. bitcoin locked this on Feb 15, 2022
  8. PastaPastaPasta referenced this in commit 5e63fcb792 on May 24, 2023
  9. PastaPastaPasta referenced this in commit b1d0a35d78 on May 29, 2023
  10. PastaPastaPasta referenced this in commit ee3953adb9 on May 29, 2023
  11. PastaPastaPasta referenced this in commit 1fdf76bfb6 on May 31, 2023

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-05-19 06:53 UTC