diff --git a/src/addrdb.cpp b/src/addrdb.cpp --- a/src/addrdb.cpp +++ b/src/addrdb.cpp @@ -95,8 +95,10 @@ ssBanlist >> FLATDATA(pchMsgTmp); // ... verify the network matches ours - if (memcmp(pchMsgTmp, Params().DiskMagic(), sizeof(pchMsgTmp))) + if (memcmp(pchMsgTmp, std::begin(Params().DiskMagic()), + sizeof(pchMsgTmp))) { return error("%s: Invalid network magic number", __func__); + } // de-serialize ban data ssBanlist >> banSet; @@ -189,8 +191,10 @@ ssPeers >> FLATDATA(pchMsgTmp); // ... verify the network matches ours - if (memcmp(pchMsgTmp, Params().DiskMagic(), sizeof(pchMsgTmp))) + if (memcmp(pchMsgTmp, std::begin(Params().DiskMagic()), + sizeof(pchMsgTmp))) { return error("%s: Invalid network magic number", __func__); + } // de-serialize address data into one CAddrMan object ssPeers >> addr; diff --git a/src/net_processing.cpp b/src/net_processing.cpp --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -3128,7 +3128,8 @@ msg.SetVersion(pfrom->GetRecvVersion()); // Scan for message start - if (memcmp(msg.hdr.pchMessageStart, chainparams.NetMagic(), + if (memcmp(std::begin(msg.hdr.pchMessageStart), + std::begin(chainparams.NetMagic()), CMessageHeader::MESSAGE_START_SIZE) != 0) { LogPrintf("PROCESSMESSAGE: INVALID MESSAGESTART %s peer=%d\n", SanitizeString(msg.hdr.GetCommand()), pfrom->id); diff --git a/src/protocol.h b/src/protocol.h --- a/src/protocol.h +++ b/src/protocol.h @@ -15,6 +15,7 @@ #include "uint256.h" #include "version.h" +#include #include #include @@ -38,7 +39,7 @@ HEADER_SIZE = MESSAGE_START_SIZE + COMMAND_SIZE + MESSAGE_SIZE_SIZE + CHECKSUM_SIZE }; - typedef uint8_t MessageMagic[MESSAGE_START_SIZE]; + typedef std::array MessageMagic; CMessageHeader(const MessageMagic &pchMessageStartIn); CMessageHeader(const MessageMagic &pchMessageStartIn, @@ -57,7 +58,7 @@ READWRITE(FLATDATA(pchChecksum)); } - char pchMessageStart[MESSAGE_START_SIZE]; + MessageMagic pchMessageStart; char pchCommand[COMMAND_SIZE]; uint32_t nMessageSize; uint8_t pchChecksum[CHECKSUM_SIZE]; diff --git a/src/protocol.cpp b/src/protocol.cpp --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -60,7 +60,8 @@ allNetMessageTypes + ARRAYLEN(allNetMessageTypes)); CMessageHeader::CMessageHeader(const MessageMagic &pchMessageStartIn) { - memcpy(pchMessageStart, pchMessageStartIn, MESSAGE_START_SIZE); + memcpy(std::begin(pchMessageStart), std::begin(pchMessageStartIn), + MESSAGE_START_SIZE); memset(pchCommand, 0, sizeof(pchCommand)); nMessageSize = -1; memset(pchChecksum, 0, CHECKSUM_SIZE); @@ -69,7 +70,8 @@ CMessageHeader::CMessageHeader(const MessageMagic &pchMessageStartIn, const char *pszCommand, unsigned int nMessageSizeIn) { - memcpy(pchMessageStart, pchMessageStartIn, MESSAGE_START_SIZE); + memcpy(std::begin(pchMessageStart), std::begin(pchMessageStartIn), + MESSAGE_START_SIZE); memset(pchCommand, 0, sizeof(pchCommand)); strncpy(pchCommand, pszCommand, COMMAND_SIZE); nMessageSize = nMessageSizeIn; @@ -83,17 +85,23 @@ bool CMessageHeader::IsValid(const MessageMagic &pchMessageStartIn) const { // Check start string - if (memcmp(pchMessageStart, pchMessageStartIn, MESSAGE_START_SIZE) != 0) + if (memcmp(std::begin(pchMessageStart), std::begin(pchMessageStartIn), + MESSAGE_START_SIZE) != 0) { return false; + } // Check the command string for errors for (const char *p1 = pchCommand; p1 < pchCommand + COMMAND_SIZE; p1++) { if (*p1 == 0) { // Must be all zeros after the first zero - for (; p1 < pchCommand + COMMAND_SIZE; p1++) - if (*p1 != 0) return false; - } else if (*p1 < ' ' || *p1 > 0x7E) + for (; p1 < pchCommand + COMMAND_SIZE; p1++) { + if (*p1 != 0) { + return false; + } + } + } else if (*p1 < ' ' || *p1 > 0x7E) { return false; + } } // Message size diff --git a/src/seeder/bitcoin.cpp b/src/seeder/bitcoin.cpp --- a/src/seeder/bitcoin.cpp +++ b/src/seeder/bitcoin.cpp @@ -189,7 +189,7 @@ } do { - CDataStream::iterator pstart = search( + CDataStream::iterator pstart = std::search( vRecv.begin(), vRecv.end(), BEGIN(netMagic), END(netMagic)); uint32_t nHeaderSize = GetSerializeSize( CMessageHeader(netMagic), vRecv.GetType(), vRecv.GetVersion()); diff --git a/src/test/validation_tests.cpp b/src/test/validation_tests.cpp --- a/src/test/validation_tests.cpp +++ b/src/test/validation_tests.cpp @@ -49,7 +49,7 @@ // serialization format is: // message start magic, size of block, block - size_t nwritten = fwrite(chainparams.DiskMagic(), + size_t nwritten = fwrite(std::begin(chainparams.DiskMagic()), CMessageHeader::MESSAGE_START_SIZE, 1, fp); BOOST_CHECK_EQUAL(nwritten, 1UL); diff --git a/src/validation.cpp b/src/validation.cpp --- a/src/validation.cpp +++ b/src/validation.cpp @@ -4461,7 +4461,7 @@ blkdat.FindByte(chainparams.DiskMagic()[0]); nRewind = blkdat.GetPos() + 1; blkdat >> FLATDATA(buf); - if (memcmp(buf, chainparams.DiskMagic(), + if (memcmp(buf, std::begin(chainparams.DiskMagic()), CMessageHeader::MESSAGE_START_SIZE)) { continue; }