Print more diagnostic info for the various DB_CORRUPT conditions
This commit is contained in:
parent
21e875c958
commit
3cc0624932
1 changed files with 36 additions and 2 deletions
38
src/db.cpp
38
src/db.cpp
|
@ -774,7 +774,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
|
||||||
// Get cursor
|
// Get cursor
|
||||||
Dbc* pcursor = GetCursor();
|
Dbc* pcursor = GetCursor();
|
||||||
if (!pcursor)
|
if (!pcursor)
|
||||||
|
{
|
||||||
|
printf("Error getting wallet database cursor\n");
|
||||||
return DB_CORRUPT;
|
return DB_CORRUPT;
|
||||||
|
}
|
||||||
|
|
||||||
loop
|
loop
|
||||||
{
|
{
|
||||||
|
@ -785,7 +788,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
|
||||||
if (ret == DB_NOTFOUND)
|
if (ret == DB_NOTFOUND)
|
||||||
break;
|
break;
|
||||||
else if (ret != 0)
|
else if (ret != 0)
|
||||||
|
{
|
||||||
|
printf("Error reading next record from wallet database\n");
|
||||||
return DB_CORRUPT;
|
return DB_CORRUPT;
|
||||||
|
}
|
||||||
|
|
||||||
// Unserialize
|
// Unserialize
|
||||||
// Taking advantage of the fact that pair serialization
|
// Taking advantage of the fact that pair serialization
|
||||||
|
@ -856,8 +862,16 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
|
||||||
ssValue >> pkey;
|
ssValue >> pkey;
|
||||||
key.SetPubKey(vchPubKey);
|
key.SetPubKey(vchPubKey);
|
||||||
key.SetPrivKey(pkey);
|
key.SetPrivKey(pkey);
|
||||||
if (key.GetPubKey() != vchPubKey || !key.IsValid())
|
if (key.GetPubKey() != vchPubKey)
|
||||||
|
{
|
||||||
|
printf("Error reading wallet database: CPrivKey pubkey inconsistency\n");
|
||||||
return DB_CORRUPT;
|
return DB_CORRUPT;
|
||||||
|
}
|
||||||
|
if (!key.IsValid())
|
||||||
|
{
|
||||||
|
printf("Error reading wallet database: invalid CPrivKey\n");
|
||||||
|
return DB_CORRUPT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -865,11 +879,22 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
|
||||||
ssValue >> wkey;
|
ssValue >> wkey;
|
||||||
key.SetPubKey(vchPubKey);
|
key.SetPubKey(vchPubKey);
|
||||||
key.SetPrivKey(wkey.vchPrivKey);
|
key.SetPrivKey(wkey.vchPrivKey);
|
||||||
if (key.GetPubKey() != vchPubKey || !key.IsValid())
|
if (key.GetPubKey() != vchPubKey)
|
||||||
|
{
|
||||||
|
printf("Error reading wallet database: CWalletKey pubkey inconsistency\n");
|
||||||
return DB_CORRUPT;
|
return DB_CORRUPT;
|
||||||
|
}
|
||||||
|
if (!key.IsValid())
|
||||||
|
{
|
||||||
|
printf("Error reading wallet database: invalid CWalletKey\n");
|
||||||
|
return DB_CORRUPT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!pwallet->LoadKey(key))
|
if (!pwallet->LoadKey(key))
|
||||||
|
{
|
||||||
|
printf("Error reading wallet database: LoadKey failed\n");
|
||||||
return DB_CORRUPT;
|
return DB_CORRUPT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (strType == "mkey")
|
else if (strType == "mkey")
|
||||||
{
|
{
|
||||||
|
@ -878,7 +903,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
|
||||||
CMasterKey kMasterKey;
|
CMasterKey kMasterKey;
|
||||||
ssValue >> kMasterKey;
|
ssValue >> kMasterKey;
|
||||||
if(pwallet->mapMasterKeys.count(nID) != 0)
|
if(pwallet->mapMasterKeys.count(nID) != 0)
|
||||||
|
{
|
||||||
|
printf("Error reading wallet database: duplicate CMasterKey id %u\n", nID);
|
||||||
return DB_CORRUPT;
|
return DB_CORRUPT;
|
||||||
|
}
|
||||||
pwallet->mapMasterKeys[nID] = kMasterKey;
|
pwallet->mapMasterKeys[nID] = kMasterKey;
|
||||||
if (pwallet->nMasterKeyMaxID < nID)
|
if (pwallet->nMasterKeyMaxID < nID)
|
||||||
pwallet->nMasterKeyMaxID = nID;
|
pwallet->nMasterKeyMaxID = nID;
|
||||||
|
@ -890,7 +918,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
|
||||||
vector<unsigned char> vchPrivKey;
|
vector<unsigned char> vchPrivKey;
|
||||||
ssValue >> vchPrivKey;
|
ssValue >> vchPrivKey;
|
||||||
if (!pwallet->LoadCryptedKey(vchPubKey, vchPrivKey))
|
if (!pwallet->LoadCryptedKey(vchPubKey, vchPrivKey))
|
||||||
|
{
|
||||||
|
printf("Error reading wallet database: LoadCryptedKey failed\n");
|
||||||
return DB_CORRUPT;
|
return DB_CORRUPT;
|
||||||
|
}
|
||||||
fIsEncrypted = true;
|
fIsEncrypted = true;
|
||||||
}
|
}
|
||||||
else if (strType == "defaultkey")
|
else if (strType == "defaultkey")
|
||||||
|
@ -924,7 +955,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
|
||||||
CScript script;
|
CScript script;
|
||||||
ssValue >> script;
|
ssValue >> script;
|
||||||
if (!pwallet->LoadCScript(script))
|
if (!pwallet->LoadCScript(script))
|
||||||
|
{
|
||||||
|
printf("Error reading wallet database: LoadCScript failed\n");
|
||||||
return DB_CORRUPT;
|
return DB_CORRUPT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pcursor->close();
|
pcursor->close();
|
||||||
|
|
Loading…
Reference in a new issue