# HG changeset patch # User Gregory Maxwell # Date 1350770785 25200 # Node ID aea4cabbc5bcdd221ba6c4eee928f853b5689b2c # Parent 4fc1724fc60e939d6b63a192b141a71457888231# Parent 436609d4d5818fe181c67ed0f985c53ecfa643d6 Merge pull request #1916 from jgarzik/caddrdb-bug Fix: CAddrMan: verify pchMessageStart file marker, before reading address data diff --git a/src/db.cpp b/src/db.cpp --- 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; }