Mercurial > hg > bitcoin
changeset 3664:aea4cabbc5bc draft
Merge pull request #1916 from jgarzik/caddrdb-bug
Fix: CAddrMan: verify pchMessageStart file marker, before reading address data
author | Gregory Maxwell <greg@xiph.org> |
---|---|
date | Sat, 20 Oct 2012 15:06:25 -0700 |
parents | 4fc1724fc60e (current diff) 436609d4d581 (diff) |
children | ce37fbfaa0e0 |
files | src/db.cpp |
diffstat | 1 files changed, 7 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/db.cpp +++ b/src/db.cpp @@ -567,20 +567,22 @@ 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; }