Skip to content

Commit ad9a13f

Browse files
committed
walletdb: Log additional exception error messages for corrupted wallets
1 parent 2df824f commit ad9a13f

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/wallet/walletdb.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,6 @@ bool HasLegacyRecords(CWallet& wallet, DatabaseBatch& batch)
541541
std::unique_ptr<DatabaseCursor> cursor = batch.GetNewPrefixCursor(prefix);
542542
if (!cursor) {
543543
// Could only happen on a closed db, which means there is an error in the code flow.
544-
wallet.WalletLogPrintf("Error getting database cursor for '%s' records", type);
545544
throw std::runtime_error(strprintf("Error getting database cursor for '%s' records", type));
546545
}
547546

@@ -1194,9 +1193,15 @@ DBErrors WalletBatch::LoadWallet(CWallet* pwallet)
11941193

11951194
// Load decryption keys
11961195
result = std::max(LoadDecryptionKeys(pwallet, *m_batch), result);
1197-
} catch (...) {
1196+
} catch (std::runtime_error& e) {
11981197
// Exceptions that can be ignored or treated as non-critical are handled by the individual loading functions.
11991198
// Any uncaught exceptions will be caught here and treated as critical.
1199+
// Catch std::runtime_error specifically as many functions throw these and they at least have some message that
1200+
// we can log
1201+
pwallet->WalletLogPrintf("%s\n", e.what());
1202+
result = DBErrors::CORRUPT;
1203+
} catch (...) {
1204+
// All other exceptions are still problematic, but we can't log them
12001205
result = DBErrors::CORRUPT;
12011206
}
12021207

0 commit comments

Comments
 (0)