Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
test
fuzz
multiplication_overflow.cpp
Go to the documentation of this file.
1
// Copyright (c) 2020-present 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
{
17
const
T
i = fuzzed_data_provider.
ConsumeIntegral
<
T
>();
18
const
T
j = fuzzed_data_provider.
ConsumeIntegral
<
T
>();
19
const
bool
is_multiplication_overflow_custom =
MultiplicationOverflow
(i, j);
20
#ifndef _MSC_VER
21
T
result_builtin;
22
const
bool
is_multiplication_overflow_builtin = __builtin_mul_overflow(i, j, &result_builtin);
23
assert
(is_multiplication_overflow_custom == is_multiplication_overflow_builtin);
24
if
(!is_multiplication_overflow_custom) {
25
assert
(i * j == result_builtin);
26
}
27
#else
28
if
(!is_multiplication_overflow_custom) {
29
(void)(i * j);
30
}
31
#endif
32
}
33
}
// namespace
34
35
FUZZ_TARGET
(multiplication_overflow)
36
{
37
FuzzedDataProvider
fuzzed_data_provider(buffer.data(), buffer.size());
38
TestMultiplicationOverflow<int64_t>(fuzzed_data_provider);
39
TestMultiplicationOverflow<uint64_t>(fuzzed_data_provider);
40
TestMultiplicationOverflow<int32_t>(fuzzed_data_provider);
41
TestMultiplicationOverflow<uint32_t>(fuzzed_data_provider);
42
TestMultiplicationOverflow<int16_t>(fuzzed_data_provider);
43
TestMultiplicationOverflow<uint16_t>(fuzzed_data_provider);
44
TestMultiplicationOverflow<char>(fuzzed_data_provider);
45
TestMultiplicationOverflow<unsigned char>(fuzzed_data_provider);
46
TestMultiplicationOverflow<signed char>(fuzzed_data_provider);
47
}
FuzzedDataProvider.h
FuzzedDataProvider
Definition
FuzzedDataProvider.h:32
FuzzedDataProvider::ConsumeIntegral
T ConsumeIntegral()
Definition
FuzzedDataProvider.h:195
fuzz.h
FUZZ_TARGET
#define FUZZ_TARGET(...)
Definition
fuzz.h:35
T
#define T(expected, seed, data)
util.h
MultiplicationOverflow
bool MultiplicationOverflow(const T i, const T j) noexcept
Definition
util.h:204
assert
assert(!tx.IsCoinBase())
Generated on
for Bitcoin Core by
1.17.0