aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Corallo <matt@bluematt.me>2011-07-10 16:07:22 +0200
committerMatt Corallo <matt@bluematt.me>2011-07-13 02:11:25 +0200
commit7414733beac92ce8ba365def592d0363fb24872c (patch)
tree2f019cb47d37a9a52481bf2aa722ca1ac4e5ce3b
parent96f34cd5c4d76459917b29b15aa9f4b7e2a6cec1 (diff)
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.
-rw-r--r--src/db.cpp2
-rw-r--r--src/main.cpp1
-rw-r--r--src/main.h1
-rw-r--r--src/wallet.cpp15
4 files changed, 15 insertions, 4 deletions
diff --git a/src/db.cpp b/src/db.cpp
index e639a34799..ebe7e3a8f6 100644
--- a/src/db.cpp
+++ b/src/db.cpp
@@ -828,7 +828,6 @@ bool CWalletDB::LoadWallet(CWallet* pwallet)
if (strKey == "fGenerateBitcoins") ssValue >> fGenerateBitcoins;
#endif
if (strKey == "nTransactionFee") ssValue >> nTransactionFee;
- if (strKey == "addrIncoming") ssValue >> addrIncoming;
if (strKey == "fLimitProcessors") ssValue >> fLimitProcessors;
if (strKey == "nLimitProcessors") ssValue >> nLimitProcessors;
if (strKey == "fMinimizeToTray") ssValue >> fMinimizeToTray;
@@ -847,7 +846,6 @@ bool CWalletDB::LoadWallet(CWallet* pwallet)
printf("nFileVersion = %d\n", nFileVersion);
printf("fGenerateBitcoins = %d\n", fGenerateBitcoins);
printf("nTransactionFee = %"PRI64d"\n", nTransactionFee);
- printf("addrIncoming = %s\n", addrIncoming.ToString().c_str());
printf("fMinimizeToTray = %d\n", fMinimizeToTray);
printf("fMinimizeOnClose = %d\n", fMinimizeOnClose);
printf("fUseProxy = %d\n", fUseProxy);
diff --git a/src/main.cpp b/src/main.cpp
index 53cdab175a..6e973493a2 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -55,7 +55,6 @@ int64 nHPSTimerStart;
// Settings
int fGenerateBitcoins = false;
int64 nTransactionFee = 0;
-CAddress addrIncoming;
int fLimitProcessors = false;
int nLimitProcessors = 1;
int fMinimizeToTray = true;
diff --git a/src/main.h b/src/main.h
index aa74ac5ab3..0757ef50ab 100644
--- a/src/main.h
+++ b/src/main.h
@@ -68,7 +68,6 @@ extern std::set<CWallet*> setpwalletRegistered;
// Settings
extern int fGenerateBitcoins;
extern int64 nTransactionFee;
-extern CAddress addrIncoming;
extern int fLimitProcessors;
extern int nLimitProcessors;
extern int fMinimizeToTray;
diff --git a/src/wallet.cpp b/src/wallet.cpp
index 9f3701a8a7..93313e7b27 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.