diff options
author | Luke Dashjr <luke-jr+git@utopios.org> | 2012-03-21 13:19:25 -0400 |
---|---|---|
committer | Luke Dashjr <luke-jr+git@utopios.org> | 2012-03-21 13:19:25 -0400 |
commit | 17a5fd9248ce62ca412f7098ca261d4b4271cc99 (patch) | |
tree | cff14a248ac394be9af507ab3f1bf25446bb3e5f /src/db.cpp | |
parent | b4c7b6a384e69ec31ae6067a9b9692fa7b02ab56 (diff) | |
parent | 0e6c6e3fd1ab971c652e48fa04bac097e44e76fe (diff) | |
download | bitcoin-17a5fd9248ce62ca412f7098ca261d4b4271cc99.tar.xz |
Merge branch '0.4.x' into 0.5.0.x
Diffstat (limited to 'src/db.cpp')
-rw-r--r-- | src/db.cpp | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/src/db.cpp b/src/db.cpp index e681d98f1a..9d5b33ac9c 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -780,7 +780,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet) // Get cursor Dbc* pcursor = GetCursor(); if (!pcursor) + { + printf("Error getting wallet database cursor\n"); return DB_CORRUPT; + } loop { @@ -791,7 +794,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet) if (ret == DB_NOTFOUND) break; else if (ret != 0) + { + printf("Error reading next record from wallet database\n"); return DB_CORRUPT; + } // Unserialize // Taking advantage of the fact that pair serialization @@ -861,19 +867,38 @@ int CWalletDB::LoadWallet(CWallet* pwallet) CPrivKey pkey; ssValue >> 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; + } + if (!key.IsValid()) + { + printf("Error reading wallet database: invalid CPrivKey\n"); + return DB_CORRUPT; + } } else { CWalletKey wkey; ssValue >> wkey; 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; + } + if (!key.IsValid()) + { + printf("Error reading wallet database: invalid CWalletKey\n"); + return DB_CORRUPT; + } } if (!pwallet->LoadKey(key)) + { + printf("Error reading wallet database: LoadKey failed\n"); return DB_CORRUPT; + } } else if (strType == "mkey") { @@ -882,7 +907,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet) CMasterKey kMasterKey; ssValue >> kMasterKey; if(pwallet->mapMasterKeys.count(nID) != 0) + { + printf("Error reading wallet database: duplicate CMasterKey id %u\n", nID); return DB_CORRUPT; + } pwallet->mapMasterKeys[nID] = kMasterKey; if (pwallet->nMasterKeyMaxID < nID) pwallet->nMasterKeyMaxID = nID; @@ -894,7 +922,10 @@ int CWalletDB::LoadWallet(CWallet* pwallet) vector<unsigned char> vchPrivKey; ssValue >> vchPrivKey; if (!pwallet->LoadCryptedKey(vchPubKey, vchPrivKey)) + { + printf("Error reading wallet database: LoadCryptedKey failed\n"); return DB_CORRUPT; + } fIsEncrypted = true; } else if (strType == "defaultkey") |