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.
This commit is contained in:
Pieter Wuille
2012-03-22 04:59:59 +01:00
committed by Luke Dashjr
parent 04dc79f1cc
commit fea0a27ddc

View File

@@ -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();
}