/root/bitcoin/src/test/fuzz/multiplication_overflow.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2020-2021 The Bitcoin Core developers |
2 | | // Distributed under the MIT software license, see the accompanying |
3 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
4 | | |
5 | | #include <test/fuzz/FuzzedDataProvider.h> |
6 | | #include <test/fuzz/fuzz.h> |
7 | | #include <test/fuzz/util.h> |
8 | | |
9 | | #include <cstdint> |
10 | | #include <string> |
11 | | #include <vector> |
12 | | |
13 | | namespace { |
14 | | template <typename T> |
15 | | void TestMultiplicationOverflow(FuzzedDataProvider& fuzzed_data_provider) |
16 | 0 | { |
17 | 0 | const T i = fuzzed_data_provider.ConsumeIntegral<T>(); |
18 | 0 | const T j = fuzzed_data_provider.ConsumeIntegral<T>(); |
19 | 0 | const bool is_multiplication_overflow_custom = MultiplicationOverflow(i, j); |
20 | 0 | #ifndef _MSC_VER |
21 | 0 | T result_builtin; |
22 | 0 | const bool is_multiplication_overflow_builtin = __builtin_mul_overflow(i, j, &result_builtin); |
23 | 0 | assert(is_multiplication_overflow_custom == is_multiplication_overflow_builtin); |
24 | 0 | if (!is_multiplication_overflow_custom) { |
25 | 0 | assert(i * j == result_builtin); |
26 | 0 | } |
27 | | #else |
28 | | if (!is_multiplication_overflow_custom) { |
29 | | (void)(i * j); |
30 | | } |
31 | | #endif |
32 | 0 | } Unexecuted instantiation: multiplication_overflow.cpp:_ZN12_GLOBAL__N_126TestMultiplicationOverflowIlEEvR18FuzzedDataProvider Unexecuted instantiation: multiplication_overflow.cpp:_ZN12_GLOBAL__N_126TestMultiplicationOverflowImEEvR18FuzzedDataProvider Unexecuted instantiation: multiplication_overflow.cpp:_ZN12_GLOBAL__N_126TestMultiplicationOverflowIiEEvR18FuzzedDataProvider Unexecuted instantiation: multiplication_overflow.cpp:_ZN12_GLOBAL__N_126TestMultiplicationOverflowIjEEvR18FuzzedDataProvider Unexecuted instantiation: multiplication_overflow.cpp:_ZN12_GLOBAL__N_126TestMultiplicationOverflowIsEEvR18FuzzedDataProvider Unexecuted instantiation: multiplication_overflow.cpp:_ZN12_GLOBAL__N_126TestMultiplicationOverflowItEEvR18FuzzedDataProvider Unexecuted instantiation: multiplication_overflow.cpp:_ZN12_GLOBAL__N_126TestMultiplicationOverflowIcEEvR18FuzzedDataProvider Unexecuted instantiation: multiplication_overflow.cpp:_ZN12_GLOBAL__N_126TestMultiplicationOverflowIhEEvR18FuzzedDataProvider Unexecuted instantiation: multiplication_overflow.cpp:_ZN12_GLOBAL__N_126TestMultiplicationOverflowIaEEvR18FuzzedDataProvider |
33 | | } // namespace |
34 | | |
35 | | FUZZ_TARGET(multiplication_overflow) |
36 | 0 | { |
37 | 0 | FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); |
38 | 0 | TestMultiplicationOverflow<int64_t>(fuzzed_data_provider); |
39 | 0 | TestMultiplicationOverflow<uint64_t>(fuzzed_data_provider); |
40 | 0 | TestMultiplicationOverflow<int32_t>(fuzzed_data_provider); |
41 | 0 | TestMultiplicationOverflow<uint32_t>(fuzzed_data_provider); |
42 | 0 | TestMultiplicationOverflow<int16_t>(fuzzed_data_provider); |
43 | 0 | TestMultiplicationOverflow<uint16_t>(fuzzed_data_provider); |
44 | 0 | TestMultiplicationOverflow<char>(fuzzed_data_provider); |
45 | 0 | TestMultiplicationOverflow<unsigned char>(fuzzed_data_provider); |
46 | 0 | TestMultiplicationOverflow<signed char>(fuzzed_data_provider); |
47 | 0 | } |