Browse Source

Merge pull request #1916 from jgarzik/caddrdb-bug

Fix: CAddrMan: verify pchMessageStart file marker, before reading address data
0.8
Gregory Maxwell 12 years ago
parent
commit
67e2c8a40a
  1. 12
      src/db.cpp

12
src/db.cpp

@ -567,20 +567,22 @@ bool CAddrDB::Read(CAddrMan& addr)
if (hashIn != hashTmp) if (hashIn != hashTmp)
return error("CAddrman::Read() : checksum mismatch; data corrupted"); return error("CAddrman::Read() : checksum mismatch; data corrupted");
// de-serialize address data
unsigned char pchMsgTmp[4]; unsigned char pchMsgTmp[4];
try { try {
// de-serialize file header (pchMessageStart magic number) and
ssPeers >> FLATDATA(pchMsgTmp); ssPeers >> FLATDATA(pchMsgTmp);
// verify the network matches ours
if (memcmp(pchMsgTmp, pchMessageStart, sizeof(pchMsgTmp)))
return error("CAddrman::Read() : invalid network magic number");
// de-serialize address data into one CAddrMan object
ssPeers >> addr; ssPeers >> addr;
} }
catch (std::exception &e) { catch (std::exception &e) {
return error("CAddrman::Read() : I/O error or stream data corrupted"); return error("CAddrman::Read() : I/O error or stream data corrupted");
} }
// finally, verify the network matches ours
if (memcmp(pchMsgTmp, pchMessageStart, sizeof(pchMsgTmp)))
return error("CAddrman::Read() : invalid network magic number");
return true; return true;
} }

Loading…
Cancel
Save