From bd2e1405711f6ba81adadb6ea6206e916c29453b Mon Sep 17 00:00:00 2001 From: Jeff Garzik Date: Mon, 8 Oct 2012 13:41:57 -0400 Subject: [PATCH] CAddrMan: verify pchMessageStart file marker, before reading address data This avoids the case where you read the address data, before noticing it is the wrong network. --- src/db.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/db.cpp b/src/db.cpp index 867703fbd..278c82078 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -842,20 +842,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; }