Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1// Copyright (c) 2020-present The Bitcoin Core developers2// Distributed under the MIT software license, see the accompanying3// file COPYING or http://www.opensource.org/licenses/mit-license.php.5#include <test/fuzz/FuzzedDataProvider.h>6#include <test/fuzz/fuzz.h>7#include <test/fuzz/util.h>9#include <cstdint>10#include <string>11#include <vector>13namespace {14template <typename T>15void TestMultiplicationOverflow(FuzzedDataProvider& fuzzed_data_provider)16{17const T i = fuzzed_data_provider.ConsumeIntegral<T>();18const T j = fuzzed_data_provider.ConsumeIntegral<T>();19const bool is_multiplication_overflow_custom = MultiplicationOverflow(i, j);20#ifndef _MSC_VER21T result_builtin;22const bool is_multiplication_overflow_builtin = __builtin_mul_overflow(i, j, &result_builtin);23assert(is_multiplication_overflow_custom == is_multiplication_overflow_builtin);24if (!is_multiplication_overflow_custom) {25assert(i * j == result_builtin);26}27#else28if (!is_multiplication_overflow_custom) {29(void)(i * j);30}31#endif32}33} // namespace35FUZZ_TARGET(multiplication_overflow)36{37FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());38TestMultiplicationOverflow<int64_t>(fuzzed_data_provider);39TestMultiplicationOverflow<uint64_t>(fuzzed_data_provider);40TestMultiplicationOverflow<int32_t>(fuzzed_data_provider);41TestMultiplicationOverflow<uint32_t>(fuzzed_data_provider);42TestMultiplicationOverflow<int16_t>(fuzzed_data_provider);43TestMultiplicationOverflow<uint16_t>(fuzzed_data_provider);44TestMultiplicationOverflow<char>(fuzzed_data_provider);45TestMultiplicationOverflow<unsigned char>(fuzzed_data_provider);46TestMultiplicationOverflow<signed char>(fuzzed_data_provider);47}
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.