Browse Source

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.
0.8
Pieter Wuille 12 years ago
parent
commit
ef12c2184d
  1. 16
      src/db.cpp

16
src/db.cpp

@ -771,6 +771,14 @@ int CWalletDB::LoadWallet(CWallet* pwallet) @@ -771,6 +771,14 @@ 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 > CLIENT_VERSION)
return DB_TOO_NEW;
pwallet->LoadMinVersion(nMinVersion);
}
// Get cursor
Dbc* pcursor = GetCursor();
if (!pcursor)
@ -940,14 +948,6 @@ int CWalletDB::LoadWallet(CWallet* pwallet) @@ -940,14 +948,6 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
if (nFileVersion == 10300)
nFileVersion = 300;
}
else if (strType == "minversion")
{
int nMinVersion = 0;
ssValue >> nMinVersion;
if (nMinVersion > CLIENT_VERSION)
return DB_TOO_NEW;
pwallet->LoadMinVersion(nMinVersion);
}
else if (strType == "cscript")
{
uint160 hash;

Loading…
Cancel
Save