File tree Expand file tree Collapse file tree 3 files changed +15
-1
lines changed Expand file tree Collapse file tree 3 files changed +15
-1
lines changed Original file line number Diff line number Diff line change @@ -6399,7 +6399,7 @@ bool ProcessMessages(CNode* pfrom, CConnman& connman)
6399
6399
6400
6400
// Checksum
6401
6401
CDataStream& vRecv = msg.vRecv ;
6402
- uint256 hash = Hash (vRecv. begin (), vRecv. begin () + nMessageSize );
6402
+ const uint256& hash = msg. GetMessageHash ( );
6403
6403
if (memcmp (hash.begin (), hdr.pchChecksum , CMessageHeader::CHECKSUM_SIZE) != 0 )
6404
6404
{
6405
6405
LogPrintf (" %s(%s, %u bytes): CHECKSUM ERROR expected %s was %s\n " , __func__,
Original file line number Diff line number Diff line change @@ -742,12 +742,21 @@ int CNetMessage::readData(const char *pch, unsigned int nBytes)
742
742
vRecv.resize (std::min (hdr.nMessageSize , nDataPos + nCopy + 256 * 1024 ));
743
743
}
744
744
745
+ hasher.Write ((const unsigned char *)pch, nCopy);
745
746
memcpy (&vRecv[nDataPos], pch, nCopy);
746
747
nDataPos += nCopy;
747
748
748
749
return nCopy;
749
750
}
750
751
752
+ const uint256& CNetMessage::GetMessageHash () const
753
+ {
754
+ assert (complete ());
755
+ if (data_hash.IsNull ())
756
+ hasher.Finalize (data_hash.begin ());
757
+ return data_hash;
758
+ }
759
+
751
760
752
761
753
762
Original file line number Diff line number Diff line change @@ -543,6 +543,9 @@ class CNodeStats
543
543
544
544
545
545
class CNetMessage {
546
+ private:
547
+ mutable CHash256 hasher;
548
+ mutable uint256 data_hash;
546
549
public:
547
550
bool in_data; // parsing header (false) or data (true)
548
551
@@ -570,6 +573,8 @@ class CNetMessage {
570
573
return (hdr.nMessageSize == nDataPos);
571
574
}
572
575
576
+ const uint256& GetMessageHash () const ;
577
+
573
578
void SetVersion (int nVersionIn)
574
579
{
575
580
hdrbuf.SetVersion (nVersionIn);
You can’t perform that action at this time.
0 commit comments