Changeset View
Changeset View
Standalone View
Standalone View
src/test/fuzz/util.h
// Copyright (c) 2009-2019 The Bitcoin Core developers | // Copyright (c) 2009-2019 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#ifndef BITCOIN_TEST_FUZZ_UTIL_H | #ifndef BITCOIN_TEST_FUZZ_UTIL_H | ||||
#define BITCOIN_TEST_FUZZ_UTIL_H | #define BITCOIN_TEST_FUZZ_UTIL_H | ||||
#include <amount.h> | #include <amount.h> | ||||
#include <attributes.h> | #include <attributes.h> | ||||
#include <script/script.h> | #include <script/script.h> | ||||
#include <serialize.h> | #include <serialize.h> | ||||
#include <streams.h> | #include <streams.h> | ||||
#include <uint256.h> | |||||
#include <version.h> | |||||
#include <test/fuzz/FuzzedDataProvider.h> | #include <test/fuzz/FuzzedDataProvider.h> | ||||
#include <test/fuzz/fuzz.h> | #include <test/fuzz/fuzz.h> | ||||
#include <version.h> | |||||
#include <cstdint> | #include <cstdint> | ||||
#include <string> | #include <string> | ||||
#include <vector> | #include <vector> | ||||
NODISCARD inline std::vector<uint8_t> | NODISCARD inline std::vector<uint8_t> | ||||
ConsumeRandomLengthByteVector(FuzzedDataProvider &fuzzed_data_provider, | ConsumeRandomLengthByteVector(FuzzedDataProvider &fuzzed_data_provider, | ||||
size_t max_length = 4096) noexcept { | size_t max_length = 4096) noexcept { | ||||
▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | ConsumeScript(FuzzedDataProvider &fuzzed_data_provider) noexcept { | ||||
return {b.begin(), b.end()}; | return {b.begin(), b.end()}; | ||||
} | } | ||||
NODISCARD inline CScriptNum | NODISCARD inline CScriptNum | ||||
ConsumeScriptNum(FuzzedDataProvider &fuzzed_data_provider) noexcept { | ConsumeScriptNum(FuzzedDataProvider &fuzzed_data_provider) noexcept { | ||||
return CScriptNum{fuzzed_data_provider.ConsumeIntegral<int64_t>()}; | return CScriptNum{fuzzed_data_provider.ConsumeIntegral<int64_t>()}; | ||||
} | } | ||||
NODISCARD inline uint256 | |||||
ConsumeUInt256(FuzzedDataProvider &fuzzed_data_provider) noexcept { | |||||
const std::vector<uint8_t> v256 = | |||||
fuzzed_data_provider.ConsumeBytes<uint8_t>(sizeof(uint256)); | |||||
if (v256.size() != sizeof(uint256)) { | |||||
return {}; | |||||
} | |||||
return uint256{v256}; | |||||
} | |||||
template <typename T> bool MultiplicationOverflow(T i, T j) { | template <typename T> bool MultiplicationOverflow(T i, T j) { | ||||
static_assert(std::is_integral<T>::value, "Integral required."); | static_assert(std::is_integral<T>::value, "Integral required."); | ||||
if (std::numeric_limits<T>::is_signed) { | if (std::numeric_limits<T>::is_signed) { | ||||
if (i > 0) { | if (i > 0) { | ||||
if (j > 0) { | if (j > 0) { | ||||
return i > (std::numeric_limits<T>::max() / j); | return i > (std::numeric_limits<T>::max() / j); | ||||
} else { | } else { | ||||
return j < (std::numeric_limits<T>::min() / i); | return j < (std::numeric_limits<T>::min() / i); | ||||
Show All 14 Lines |