From: Pieter Wuille Date: Thu, 22 Mar 2012 03:59:59 +0000 (+0100) Subject: Check minversion before loading the rest of the wallet X-Git-Tag: v0.4.0-unstable~129^2~1^2^2~2^2^2~41 X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=commitdiff_plain;h=fea0a27ddc30f2d51c386d268499d6c50363c202 Check minversion before loading the rest of the wallet When a 0.6 wallet with compressed pubkeys is created, it writes a minversion record to prevent older clients from reading it. If the 0.5 loading it sees a key record before seeing the minversion record however, it will fail with DB_CORRUPT instead of DB_TOO_NEW. --- diff --git a/src/db.cpp b/src/db.cpp index 7f9439b..bf335e7 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -795,6 +795,13 @@ int CWalletDB::LoadWallet(CWallet* pwallet) //// todo: shouldn't we catch exceptions and try to recover and continue? CRITICAL_BLOCK(pwallet->cs_wallet) { + int nMinVersion = 0; + if (Read((string)"minversion", nMinVersion)) + { + if (nMinVersion > VERSION) + return DB_TOO_NEW; + } + // Get cursor Dbc* pcursor = GetCursor(); if (!pcursor) @@ -980,13 +987,6 @@ int CWalletDB::LoadWallet(CWallet* pwallet) if (strKey == "addrProxy") ssValue >> addrProxy; if (fHaveUPnP && strKey == "fUseUPnP") ssValue >> fUseUPnP; } - else if (strType == "minversion") - { - int nMinVersion = 0; - ssValue >> nMinVersion; - if (nMinVersion > VERSION) - return DB_TOO_NEW; - } } pcursor->close(); }