diff options
| author | Matt Corallo <[email protected]> | 2011-07-10 16:07:22 +0200 |
|---|---|---|
| committer | Matt Corallo <[email protected]> | 2011-07-13 02:11:25 +0200 |
| commit | 7414733beac92ce8ba365def592d0363fb24872c (patch) | |
| tree | 2f019cb47d37a9a52481bf2aa722ca1ac4e5ce3b /src/wallet.cpp | |
| parent | Use DB Transactions when encrypting wallet. (diff) | |
| download | discoin-7414733beac92ce8ba365def592d0363fb24872c.tar.xz discoin-7414733beac92ce8ba365def592d0363fb24872c.zip | |
Make an invalid addrIncoming so that old clients crash.
This prevents old clients from opening, and thus corrupting
or otherwise causing harm to encrypted wallets.
Diffstat (limited to 'src/wallet.cpp')
| -rw-r--r-- | src/wallet.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/wallet.cpp b/src/wallet.cpp index 9f3701a8a..93313e7b2 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -108,6 +108,19 @@ bool CWallet::ChangeWalletPassphrase(const string& strOldWalletPassphrase, const return false; } + +// This class implements an addrIncoming entry that causes pre-0.4 +// clients to crash on startup if reading a private-key-encrypted wallet. +class CCorruptAddress +{ +public: + IMPLEMENT_SERIALIZE + ( + if (nType & SER_DISK) + READWRITE(nVersion); + ) +}; + bool CWallet::EncryptWallet(const string& strWalletPassphrase) { CRITICAL_BLOCK(cs_mapPubKeys) @@ -166,6 +179,8 @@ bool CWallet::EncryptWallet(const string& strWalletPassphrase) if (fFileBacked) { + CCorruptAddress corruptAddress; + pwalletdbEncryption->WriteSetting("addrIncoming", corruptAddress); if (!pwalletdbEncryption->TxnCommit()) exit(1); //We now have keys encrypted in memory, but no on disk...die to avoid confusion and let the user reload their unencrypted wallet. |