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;
 }