Bitcoin Core
31.0.0
P2P Digital Currency
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
Ticks
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.
Definition
time.h:73
assert
assert(!tx.IsCoinBase())
fuzzed_data_provider
FuzzedDataProvider & fuzzed_data_provider
Definition
fees.cpp:38
Generated on Thu Apr 16 2026 09:42:38 for Bitcoin Core by
1.10.0