mirror of
https://github.com/dashpay/dash.git
synced 2024-12-24 19:42:46 +01:00
merge bitcoin#28127: Remove C-style const-violating cast, Use reinterpret_cast
This commit is contained in:
parent
3910a7547f
commit
d00f8a1316
@ -17,73 +17,73 @@
|
||||
uint16_t static inline ReadLE16(const unsigned char* ptr)
|
||||
{
|
||||
uint16_t x;
|
||||
memcpy((char*)&x, ptr, 2);
|
||||
memcpy(&x, ptr, 2);
|
||||
return le16toh(x);
|
||||
}
|
||||
|
||||
uint32_t static inline ReadLE32(const unsigned char* ptr)
|
||||
{
|
||||
uint32_t x;
|
||||
memcpy((char*)&x, ptr, 4);
|
||||
memcpy(&x, ptr, 4);
|
||||
return le32toh(x);
|
||||
}
|
||||
|
||||
uint64_t static inline ReadLE64(const unsigned char* ptr)
|
||||
{
|
||||
uint64_t x;
|
||||
memcpy((char*)&x, ptr, 8);
|
||||
memcpy(&x, ptr, 8);
|
||||
return le64toh(x);
|
||||
}
|
||||
|
||||
void static inline WriteLE16(unsigned char* ptr, uint16_t x)
|
||||
{
|
||||
uint16_t v = htole16(x);
|
||||
memcpy(ptr, (char*)&v, 2);
|
||||
memcpy(ptr, &v, 2);
|
||||
}
|
||||
|
||||
void static inline WriteLE32(unsigned char* ptr, uint32_t x)
|
||||
{
|
||||
uint32_t v = htole32(x);
|
||||
memcpy(ptr, (char*)&v, 4);
|
||||
memcpy(ptr, &v, 4);
|
||||
}
|
||||
|
||||
void static inline WriteLE64(unsigned char* ptr, uint64_t x)
|
||||
{
|
||||
uint64_t v = htole64(x);
|
||||
memcpy(ptr, (char*)&v, 8);
|
||||
memcpy(ptr, &v, 8);
|
||||
}
|
||||
|
||||
uint16_t static inline ReadBE16(const unsigned char* ptr)
|
||||
{
|
||||
uint16_t x;
|
||||
memcpy((char*)&x, ptr, 2);
|
||||
memcpy(&x, ptr, 2);
|
||||
return be16toh(x);
|
||||
}
|
||||
|
||||
uint32_t static inline ReadBE32(const unsigned char* ptr)
|
||||
{
|
||||
uint32_t x;
|
||||
memcpy((char*)&x, ptr, 4);
|
||||
memcpy(&x, ptr, 4);
|
||||
return be32toh(x);
|
||||
}
|
||||
|
||||
uint64_t static inline ReadBE64(const unsigned char* ptr)
|
||||
{
|
||||
uint64_t x;
|
||||
memcpy((char*)&x, ptr, 8);
|
||||
memcpy(&x, ptr, 8);
|
||||
return be64toh(x);
|
||||
}
|
||||
|
||||
void static inline WriteBE32(unsigned char* ptr, uint32_t x)
|
||||
{
|
||||
uint32_t v = htobe32(x);
|
||||
memcpy(ptr, (char*)&v, 4);
|
||||
memcpy(ptr, &v, 4);
|
||||
}
|
||||
|
||||
void static inline WriteBE64(unsigned char* ptr, uint64_t x)
|
||||
{
|
||||
uint64_t v = htobe64(x);
|
||||
memcpy(ptr, (char*)&v, 8);
|
||||
memcpy(ptr, &v, 8);
|
||||
}
|
||||
|
||||
/** Return the smallest number n such that (x >> n) == 0 (or 64 if the highest bit in x is set. */
|
||||
|
@ -21,6 +21,8 @@
|
||||
static const size_t DBWRAPPER_PREALLOC_KEY_SIZE = 64;
|
||||
static const size_t DBWRAPPER_PREALLOC_VALUE_SIZE = 1024;
|
||||
|
||||
inline auto CharCast(const std::byte* data) { return reinterpret_cast<const char*>(data); }
|
||||
|
||||
class dbwrapper_error : public std::runtime_error
|
||||
{
|
||||
public:
|
||||
@ -83,12 +85,12 @@ public:
|
||||
template <typename V>
|
||||
void Write(const CDataStream& _ssKey, const V& value)
|
||||
{
|
||||
leveldb::Slice slKey((const char*)_ssKey.data(), _ssKey.size());
|
||||
leveldb::Slice slKey(CharCast(_ssKey.data()), _ssKey.size());
|
||||
|
||||
ssValue.reserve(DBWRAPPER_PREALLOC_VALUE_SIZE);
|
||||
ssValue << value;
|
||||
ssValue.Xor(dbwrapper_private::GetObfuscateKey(parent));
|
||||
leveldb::Slice slValue((const char*)ssValue.data(), ssValue.size());
|
||||
leveldb::Slice slValue(CharCast(ssValue.data()), ssValue.size());
|
||||
|
||||
batch.Put(slKey, slValue);
|
||||
// - varint: key length (1 byte up to 127B, 2 bytes up to 16383B, ...)
|
||||
@ -110,7 +112,7 @@ public:
|
||||
}
|
||||
|
||||
void Erase(const CDataStream& _ssKey) {
|
||||
leveldb::Slice slKey((const char*)_ssKey.data(), _ssKey.size());
|
||||
leveldb::Slice slKey(CharCast(_ssKey.data()), _ssKey.size());
|
||||
|
||||
batch.Delete(slKey);
|
||||
// - byte: header
|
||||
@ -151,7 +153,7 @@ public:
|
||||
}
|
||||
|
||||
void Seek(const CDataStream& ssKey) {
|
||||
leveldb::Slice slKey((const char*)ssKey.data(), ssKey.size());
|
||||
leveldb::Slice slKey(CharCast(ssKey.data()), ssKey.size());
|
||||
piter->Seek(slKey);
|
||||
}
|
||||
|
||||
@ -259,7 +261,7 @@ public:
|
||||
|
||||
bool ReadDataStream(const CDataStream& ssKey, CDataStream& ssValue) const
|
||||
{
|
||||
leveldb::Slice slKey((const char*)ssKey.data(), ssKey.size());
|
||||
leveldb::Slice slKey(CharCast(ssKey.data()), ssKey.size());
|
||||
|
||||
std::string strValue;
|
||||
leveldb::Status status = pdb->Get(readoptions, slKey, &strValue);
|
||||
@ -319,7 +321,7 @@ public:
|
||||
|
||||
bool Exists(const CDataStream& key) const
|
||||
{
|
||||
leveldb::Slice slKey((const char*)key.data(), key.size());
|
||||
leveldb::Slice slKey(CharCast(key.data()), key.size());
|
||||
|
||||
std::string strValue;
|
||||
leveldb::Status status = pdb->Get(readoptions, slKey, &strValue);
|
||||
@ -363,8 +365,8 @@ public:
|
||||
ssKey2.reserve(DBWRAPPER_PREALLOC_KEY_SIZE);
|
||||
ssKey1 << key_begin;
|
||||
ssKey2 << key_end;
|
||||
leveldb::Slice slKey1((const char*)ssKey1.data(), ssKey1.size());
|
||||
leveldb::Slice slKey2((const char*)ssKey2.data(), ssKey2.size());
|
||||
leveldb::Slice slKey1(CharCast(ssKey1.data()), ssKey1.size());
|
||||
leveldb::Slice slKey2(CharCast(ssKey2.data()), ssKey2.size());
|
||||
uint64_t size = 0;
|
||||
leveldb::Range range(slKey1, slKey2);
|
||||
pdb->GetApproximateSizes(&range, 1, &size);
|
||||
@ -382,8 +384,8 @@ public:
|
||||
ssKey2.reserve(DBWRAPPER_PREALLOC_KEY_SIZE);
|
||||
ssKey1 << key_begin;
|
||||
ssKey2 << key_end;
|
||||
leveldb::Slice slKey1((const char*)ssKey1.data(), ssKey1.size());
|
||||
leveldb::Slice slKey2((const char*)ssKey2.data(), ssKey2.size());
|
||||
leveldb::Slice slKey1(CharCast(ssKey1.data()), ssKey1.size());
|
||||
leveldb::Slice slKey2(CharCast(ssKey2.data()), ssKey2.size());
|
||||
pdb->CompactRange(&slKey1, &slKey2);
|
||||
}
|
||||
|
||||
|
12
src/span.h
12
src/span.h
@ -5,10 +5,10 @@
|
||||
#ifndef BITCOIN_SPAN_H
|
||||
#define BITCOIN_SPAN_H
|
||||
|
||||
#include <type_traits>
|
||||
#include <cstddef>
|
||||
#include <algorithm>
|
||||
#include <assert.h>
|
||||
#include <cassert>
|
||||
#include <cstddef>
|
||||
#include <type_traits>
|
||||
|
||||
#ifdef DEBUG_CORE
|
||||
#define CONSTEXPR_IF_NOT_DEBUG
|
||||
@ -267,10 +267,10 @@ Span<std::byte> MakeWritableByteSpan(V&& v) noexcept
|
||||
}
|
||||
|
||||
// Helper functions to safely cast to unsigned char pointers.
|
||||
inline unsigned char* UCharCast(char* c) { return (unsigned char*)c; }
|
||||
inline unsigned char* UCharCast(char* c) { return reinterpret_cast<unsigned char*>(c); }
|
||||
inline unsigned char* UCharCast(unsigned char* c) { return c; }
|
||||
inline unsigned char* UCharCast(std::byte* c) { return (unsigned char*)c; }
|
||||
inline const unsigned char* UCharCast(const char* c) { return (unsigned char*)c; }
|
||||
inline unsigned char* UCharCast(std::byte* c) { return reinterpret_cast<unsigned char*>(c); }
|
||||
inline const unsigned char* UCharCast(const char* c) { return reinterpret_cast<const unsigned char*>(c); }
|
||||
inline const unsigned char* UCharCast(const unsigned char* c) { return c; }
|
||||
inline const unsigned char* UCharCast(const std::byte* c) { return reinterpret_cast<const unsigned char*>(c); }
|
||||
|
||||
|
@ -111,7 +111,7 @@ public:
|
||||
test.SetupArgs({{"-value", flags}});
|
||||
const char* argv[] = {"ignored", arg};
|
||||
std::string error;
|
||||
bool success = test.ParseParameters(arg ? 2 : 1, (char**)argv, error);
|
||||
bool success = test.ParseParameters(arg ? 2 : 1, argv, error);
|
||||
|
||||
BOOST_CHECK_EQUAL(test.GetSetting("-value").write(), expect.setting.write());
|
||||
auto settings_list = test.GetSettingsList("-value");
|
||||
@ -216,13 +216,13 @@ BOOST_AUTO_TEST_CASE(util_ParseParameters)
|
||||
std::string error;
|
||||
LOCK(testArgs.cs_args);
|
||||
testArgs.SetupArgs({a, b, ccc, d});
|
||||
BOOST_CHECK(testArgs.ParseParameters(0, (char**)argv_test, error));
|
||||
BOOST_CHECK(testArgs.ParseParameters(0, argv_test, error));
|
||||
BOOST_CHECK(testArgs.m_settings.command_line_options.empty() && testArgs.m_settings.ro_config.empty());
|
||||
|
||||
BOOST_CHECK(testArgs.ParseParameters(1, (char**)argv_test, error));
|
||||
BOOST_CHECK(testArgs.ParseParameters(1, argv_test, error));
|
||||
BOOST_CHECK(testArgs.m_settings.command_line_options.empty() && testArgs.m_settings.ro_config.empty());
|
||||
|
||||
BOOST_CHECK(testArgs.ParseParameters(7, (char**)argv_test, error));
|
||||
BOOST_CHECK(testArgs.ParseParameters(7, argv_test, error));
|
||||
// expectation: -ignored is ignored (program name argument),
|
||||
// -a, -b and -ccc end up in map, -d ignored because it is after
|
||||
// a non-option argument (non-GNU option parsing)
|
||||
@ -247,17 +247,17 @@ BOOST_AUTO_TEST_CASE(util_ParseInvalidParameters)
|
||||
|
||||
const char* argv[] = {"ignored", "-registered"};
|
||||
std::string error;
|
||||
BOOST_CHECK(test.ParseParameters(2, (char**)argv, error));
|
||||
BOOST_CHECK(test.ParseParameters(2, argv, error));
|
||||
BOOST_CHECK_EQUAL(error, "");
|
||||
|
||||
argv[1] = "-unregistered";
|
||||
BOOST_CHECK(!test.ParseParameters(2, (char**)argv, error));
|
||||
BOOST_CHECK(!test.ParseParameters(2, argv, error));
|
||||
BOOST_CHECK_EQUAL(error, "Invalid parameter -unregistered");
|
||||
|
||||
// Make sure registered parameters prefixed with a chain name trigger errors.
|
||||
// (Previously, they were accepted and ignored.)
|
||||
argv[1] = "-test.registered";
|
||||
BOOST_CHECK(!test.ParseParameters(2, (char**)argv, error));
|
||||
BOOST_CHECK(!test.ParseParameters(2, argv, error));
|
||||
BOOST_CHECK_EQUAL(error, "Invalid parameter -test.registered");
|
||||
}
|
||||
|
||||
@ -268,7 +268,7 @@ static void TestParse(const std::string& str, bool expected_bool, int64_t expect
|
||||
std::string arg = "-value=" + str;
|
||||
const char* argv[] = {"ignored", arg.c_str()};
|
||||
std::string error;
|
||||
BOOST_CHECK(test.ParseParameters(2, (char**)argv, error));
|
||||
BOOST_CHECK(test.ParseParameters(2, argv, error));
|
||||
BOOST_CHECK_EQUAL(test.GetBoolArg("-value", false), expected_bool);
|
||||
BOOST_CHECK_EQUAL(test.GetBoolArg("-value", true), expected_bool);
|
||||
BOOST_CHECK_EQUAL(test.GetArg("-value", 99998), expected_int);
|
||||
@ -330,7 +330,7 @@ BOOST_AUTO_TEST_CASE(util_GetBoolArg)
|
||||
std::string error;
|
||||
LOCK(testArgs.cs_args);
|
||||
testArgs.SetupArgs({a, b, c, d, e, f});
|
||||
BOOST_CHECK(testArgs.ParseParameters(7, (char**)argv_test, error));
|
||||
BOOST_CHECK(testArgs.ParseParameters(7, argv_test, error));
|
||||
|
||||
// Each letter should be set.
|
||||
for (const char opt : "abcdef")
|
||||
@ -367,7 +367,7 @@ BOOST_AUTO_TEST_CASE(util_GetBoolArgEdgeCases)
|
||||
const char *argv_test[] = {"ignored", "-nofoo", "-foo", "-nobar=0"};
|
||||
testArgs.SetupArgs({foo, bar});
|
||||
std::string error;
|
||||
BOOST_CHECK(testArgs.ParseParameters(4, (char**)argv_test, error));
|
||||
BOOST_CHECK(testArgs.ParseParameters(4, argv_test, error));
|
||||
|
||||
// This was passed twice, second one overrides the negative setting.
|
||||
BOOST_CHECK(!testArgs.IsArgNegated("-foo"));
|
||||
@ -379,7 +379,7 @@ BOOST_AUTO_TEST_CASE(util_GetBoolArgEdgeCases)
|
||||
|
||||
// Config test
|
||||
const char *conf_test = "nofoo=1\nfoo=1\nnobar=0\n";
|
||||
BOOST_CHECK(testArgs.ParseParameters(1, (char**)argv_test, error));
|
||||
BOOST_CHECK(testArgs.ParseParameters(1, argv_test, error));
|
||||
testArgs.ReadConfigString(conf_test);
|
||||
|
||||
// This was passed twice, second one overrides the negative setting,
|
||||
@ -394,7 +394,7 @@ BOOST_AUTO_TEST_CASE(util_GetBoolArgEdgeCases)
|
||||
// Combined test
|
||||
const char *combo_test_args[] = {"ignored", "-nofoo", "-bar"};
|
||||
const char *combo_test_conf = "foo=1\nnobar=1\n";
|
||||
BOOST_CHECK(testArgs.ParseParameters(3, (char**)combo_test_args, error));
|
||||
BOOST_CHECK(testArgs.ParseParameters(3, combo_test_args, error));
|
||||
testArgs.ReadConfigString(combo_test_conf);
|
||||
|
||||
// Command line overrides, but doesn't erase old setting
|
||||
@ -654,38 +654,38 @@ BOOST_AUTO_TEST_CASE(util_GetChainName)
|
||||
const char* testnetconf = "testnet=1\nregtest=0\n[test]\nregtest=1";
|
||||
std::string error;
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(0, (char**)argv_testnet, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet, error));
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainName(), "main");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, (char**)argv_testnet, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_testnet, error));
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainName(), "test");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, (char**)argv_regtest, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_regtest, error));
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainName(), "regtest");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(3, (char**)argv_test_no_reg, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(3, argv_test_no_reg, error));
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainName(), "test");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(3, (char**)argv_both, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(3, argv_both, error));
|
||||
BOOST_CHECK_THROW(test_args.GetChainName(), std::runtime_error);
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(0, (char**)argv_testnet, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainName(), "test");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, (char**)argv_testnet, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_testnet, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainName(), "test");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, (char**)argv_regtest, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_regtest, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_THROW(test_args.GetChainName(), std::runtime_error);
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(3, (char**)argv_test_no_reg, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(3, argv_test_no_reg, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainName(), "test");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(3, (char**)argv_both, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(3, argv_both, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_THROW(test_args.GetChainName(), std::runtime_error);
|
||||
|
||||
@ -693,23 +693,23 @@ BOOST_AUTO_TEST_CASE(util_GetChainName)
|
||||
// [test] regtest=1 potentially relevant) doesn't break things
|
||||
test_args.SelectConfigNetwork("test");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(0, (char**)argv_testnet, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainName(), "test");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, (char**)argv_testnet, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_testnet, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainName(), "test");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, (char**)argv_regtest, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_regtest, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_THROW(test_args.GetChainName(), std::runtime_error);
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, (char**)argv_test_no_reg, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_test_no_reg, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainName(), "test");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(3, (char**)argv_both, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(3, argv_both, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_THROW(test_args.GetChainName(), std::runtime_error);
|
||||
}
|
||||
|
@ -111,7 +111,7 @@ bool EncryptSecret(const CKeyingMaterial& vMasterKey, const CKeyingMaterial &vch
|
||||
memcpy(chIV.data(), &nIV, WALLET_CRYPTO_IV_SIZE);
|
||||
if(!cKeyCrypter.SetKey(vMasterKey, chIV))
|
||||
return false;
|
||||
return cKeyCrypter.Encrypt(*((const CKeyingMaterial*)&vchPlaintext), vchCiphertext);
|
||||
return cKeyCrypter.Encrypt(vchPlaintext, vchCiphertext);
|
||||
}
|
||||
|
||||
// General secure AES 256 CBC encryption routine
|
||||
|
Loading…
Reference in New Issue
Block a user