Browse Source

Merge pull request #1916 from jgarzik/caddrdb-bug

Fix: CAddrMan: verify pchMessageStart file marker, before reading address data
miguelfreitas
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) @@ -567,20 +567,22 @@ bool CAddrDB::Read(CAddrMan& addr)
if (hashIn != hashTmp)
return error("CAddrman::Read() : checksum mismatch; data corrupted");
// de-serialize address data
unsigned char pchMsgTmp[4];
try {
// de-serialize file header (pchMessageStart magic number) and
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;
}
catch (std::exception &e) {
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;
}

Loading…
Cancel
Save