From 67ed7d9d4929d8fe1c5f976c184c72dff02d83b7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 25 Jul 2011 15:06:45 -0700 Subject: [PATCH 1/7] Fix UNIX-specific thread handle leak. --- src/util.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/util.h b/src/util.h index 9922ba82a..8588201da 100644 --- a/src/util.h +++ b/src/util.h @@ -623,7 +623,10 @@ inline pthread_t CreateThread(void(*pfn)(void*), void* parg, bool fWantHandle=fa return (pthread_t)0; } if (!fWantHandle) + { + pthread_detach(hthread); return (pthread_t)-1; + } return hthread; } From 8c2143d4d892fa806f98cf55565757b4aa3bf6a7 Mon Sep 17 00:00:00 2001 From: Han Lin Yap Date: Sat, 30 Jul 2011 19:58:22 +0300 Subject: [PATCH 2/7] Comment "deprecated" --- src/rpc.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rpc.cpp b/src/rpc.cpp index 92096b460..21ef990f0 100644 --- a/src/rpc.cpp +++ b/src/rpc.cpp @@ -1742,7 +1742,7 @@ string pAllowInSafeMode[] = "getinfo", "getnewaddress", "getaccountaddress", - "setlabel", + "setlabel", // deprecated "getaccount", "getlabel", // deprecated "getaddressesbyaccount", @@ -2373,7 +2373,7 @@ int CommandLineRPC(int argc, char *argv[]) if (strMethod == "getreceivedbyaccount" && n > 1) ConvertTo(params[1]); if (strMethod == "getreceivedbylabel" && n > 1) ConvertTo(params[1]); // deprecated if (strMethod == "getallreceived" && n > 0) ConvertTo(params[0]); // deprecated - if (strMethod == "getallreceived" && n > 1) ConvertTo(params[1]); + if (strMethod == "getallreceived" && n > 1) ConvertTo(params[1]); // deprecated if (strMethod == "listreceivedbyaddress" && n > 0) ConvertTo(params[0]); if (strMethod == "listreceivedbyaddress" && n > 1) ConvertTo(params[1]); if (strMethod == "listreceivedbyaccount" && n > 0) ConvertTo(params[0]); From 364685e1957217c9638ed73ee5343f0e4573504b Mon Sep 17 00:00:00 2001 From: Jeroenz0r Date: Mon, 1 Aug 2011 02:03:19 +0300 Subject: [PATCH 3/7] Translation from "Open Bitcoin" to "Verstuur Bitcoins" --- locale/nl/LC_MESSAGES/bitcoin.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/nl/LC_MESSAGES/bitcoin.po b/locale/nl/LC_MESSAGES/bitcoin.po index 97216add9..986a1e5d9 100644 --- a/locale/nl/LC_MESSAGES/bitcoin.po +++ b/locale/nl/LC_MESSAGES/bitcoin.po @@ -448,7 +448,7 @@ msgstr "&Open Bitcoin" #: ../../../src/ui.cpp:2682 msgid "&Send Bitcoins" -msgstr "&Open Bitcoin" +msgstr "&Verstuur Bitcoins" #: ../../../src/ui.cpp:2683 msgid "O&ptions..." From 15656981697f3421043a3d371bb887f036a32cf0 Mon Sep 17 00:00:00 2001 From: Johannes Henninger Date: Mon, 1 Aug 2011 16:34:59 +0200 Subject: [PATCH 4/7] Identify as "Bitcoin + version number" when mapping UPnP port Makes Bitcoin identify itself as "Bitcoin + version number" instead of the nondescript "libminiupnpc" when forwarding a port via UPnP. --- src/net.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index 2a90f6d0c..d69778821 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1092,13 +1092,14 @@ void ThreadMapPort2(void* parg) { char intClient[16]; char intPort[6]; + string strDesc = "Bitcoin " + FormatFullVersion(); #ifndef __WXMSW__ r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, - port, port, lanaddr, 0, "TCP", 0); + port, port, lanaddr, strDesc.c_str(), "TCP", 0); #else r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, - port, port, lanaddr, 0, "TCP", 0, "0"); + port, port, lanaddr, strDesc.c_str(), "TCP", 0, "0"); #endif if(r!=UPNPCOMMAND_SUCCESS) printf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", From 4d2ef6e5b6298a502d1fd9a50e093b7206aa2834 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 3 Aug 2011 13:00:27 +0200 Subject: [PATCH 5/7] avoid strAddress + validity checks Avoid references to addresses using strings, and use CBitcoinAddress as much as possible. Also added some validity checks on addresses entered using RPC. --- src/rpc.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/rpc.cpp b/src/rpc.cpp index 21ef990f0..a4deece6b 100644 --- a/src/rpc.cpp +++ b/src/rpc.cpp @@ -342,21 +342,19 @@ Value getnewaddress(const Array& params, bool fHelp) strAccount = AccountFromValue(params[0]); // Generate a new key that is added to wallet - string strAddress = CBitcoinAddress(pwalletMain->GetOrReuseKeyFromPool()).ToString(); + CBitcoinAddress address(pwalletMain->GetOrReuseKeyFromPool()); // This could be done in the same main CS as GetKeyFromKeyPool. CRITICAL_BLOCK(pwalletMain->cs_mapAddressBook) - pwalletMain->SetAddressBookName(strAddress, strAccount); + pwalletMain->SetAddressBookName(address, strAccount); - return strAddress; + return address.ToString(); } // requires cs_main, cs_mapWallet, cs_mapAddressBook locks CBitcoinAddress GetAccountAddress(string strAccount, bool bForceNew=false) { - string strAddress; - CWalletDB walletdb(pwalletMain->strWalletFile); CAccount account; @@ -393,8 +391,7 @@ CBitcoinAddress GetAccountAddress(string strAccount, bool bForceNew=false) else { account.vchPubKey = pwalletMain->GetOrReuseKeyFromPool(); - string strAddress = CBitcoinAddress(account.vchPubKey).ToString(); - pwalletMain->SetAddressBookName(strAddress, strAccount); + pwalletMain->SetAddressBookName(CBitcoinAddress(account.vchPubKey), strAccount); walletdb.WriteAccount(strAccount, account); } } @@ -434,8 +431,7 @@ Value setaccount(const Array& params, bool fHelp) "setaccount \n" "Sets the account associated with the given address."); - string strAddress = params[0].get_str(); - CBitcoinAddress address(strAddress); + CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) throw JSONRPCError(-5, "Invalid bitcoin address"); @@ -456,7 +452,7 @@ Value setaccount(const Array& params, bool fHelp) GetAccountAddress(strOldAccount, true); } - pwalletMain->SetAddressBookName(strAddress, strAccount); + pwalletMain->SetAddressBookName(address, strAccount); } return Value::null; @@ -470,8 +466,9 @@ Value getaccount(const Array& params, bool fHelp) "getaccount \n" "Returns the account associated with the given address."); - string strAddress = params[0].get_str(); - CBitcoinAddress address(strAddress); + CBitcoinAddress address(params[0].get_str()); + if (!address.IsValid()) + throw JSONRPCError(-5, "Invalid bitcoin address"); string strAccount; CRITICAL_BLOCK(pwalletMain->cs_mapAddressBook) @@ -536,7 +533,9 @@ Value sendtoaddress(const Array& params, bool fHelp) "sendtoaddress [comment] [comment-to]\n" " is a real and is rounded to the nearest 0.00000001"); - string strAddress = params[0].get_str(); + CBitcoinAddress address(params[0].get_str()); + if (!address.IsValid()) + throw JSONRPCError(-5, "Invalid bitcoin address"); // Amount int64 nAmount = AmountFromValue(params[1]); @@ -554,7 +553,7 @@ Value sendtoaddress(const Array& params, bool fHelp) if(pwalletMain->IsLocked()) throw JSONRPCError(-14, "Error: The wallet passphrase entered was incorrect."); - string strError = pwalletMain->SendMoneyToBitcoinAddress(strAddress, nAmount, wtx); + string strError = pwalletMain->SendMoneyToBitcoinAddress(address, nAmount, wtx); if (strError != "") throw JSONRPCError(-4, strError); } @@ -807,7 +806,9 @@ Value sendfrom(const Array& params, bool fHelp) " is a real and is rounded to the nearest 0.00000001"); string strAccount = AccountFromValue(params[0]); - string strAddress = params[1].get_str(); + CBitcoinAddress address(params[1].get_str()); + if (!address.IsValid()) + throw JSONRPCError(-5, "Invalid bitcoin address"); int64 nAmount = AmountFromValue(params[2]); int nMinDepth = 1; if (params.size() > 3) @@ -833,7 +834,7 @@ Value sendfrom(const Array& params, bool fHelp) throw JSONRPCError(-6, "Account has insufficient funds"); // Send - string strError = pwalletMain->SendMoneyToBitcoinAddress(strAddress, nAmount, wtx); + string strError = pwalletMain->SendMoneyToBitcoinAddress(address, nAmount, wtx); if (strError != "") throw JSONRPCError(-4, strError); } @@ -1538,8 +1539,7 @@ Value validateaddress(const Array& params, bool fHelp) "validateaddress \n" "Return information about ."); - string strAddress = params[0].get_str(); - CBitcoinAddress address(strAddress); + CBitcoinAddress address(params[0].get_str()); bool isValid = address.IsValid(); Object ret; From 918150048a1d677731ab7f2b3f59fa9a7401d435 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 3 Aug 2011 21:02:07 +0200 Subject: [PATCH 6/7] Make it clear that setting proxy requires restart to fully apply. --- share/uiproject.fbp | 2 +- src/uibase.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/share/uiproject.fbp b/share/uiproject.fbp index d5e6b1e36..7d2c25841 100644 --- a/share/uiproject.fbp +++ b/share/uiproject.fbp @@ -2090,7 +2090,7 @@ 0 wxID_ANY - &Connect through socks4 proxy: + &Connect through socks4 proxy (requires restart to apply): m_checkBoxUseProxy diff --git a/src/uibase.cpp b/src/uibase.cpp index 18eec4413..6d219ad66 100644 --- a/src/uibase.cpp +++ b/src/uibase.cpp @@ -367,7 +367,7 @@ COptionsDialogBase::COptionsDialogBase( wxWindow* parent, wxWindowID id, const w wxBoxSizer* bSizer102; bSizer102 = new wxBoxSizer( wxHORIZONTAL ); - m_checkBoxUseProxy = new wxCheckBox( m_panelMain, wxID_ANY, _("&Connect through socks4 proxy: "), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxUseProxy = new wxCheckBox( m_panelMain, wxID_ANY, _("&Connect through socks4 proxy (requires restart to apply): "), wxDefaultPosition, wxDefaultSize, 0 ); bSizer102->Add( m_checkBoxUseProxy, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); bSizer69->Add( bSizer102, 1, wxEXPAND, 5 ); From 01a509fa2616537a4b444966d6e4e451822b2abd Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Wed, 3 Aug 2011 21:02:37 +0200 Subject: [PATCH 7/7] Don't listen if on TOR (resolves #441). --- src/init.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/init.cpp b/src/init.cpp index 266c99202..acfcc44d1 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -247,7 +247,8 @@ bool AppInit2(int argc, char* argv[]) fPrintToDebugger = GetBoolArg("-printtodebugger"); fTestNet = GetBoolArg("-testnet"); - fNoListen = GetBoolArg("-nolisten"); + bool fTOR = (fUseProxy && addrProxy.port == htons(9050)); + fNoListen = GetBoolArg("-nolisten") || fTOR; fLogTimestamps = GetBoolArg("-logtimestamps"); for (int i = 1; i < argc; i++)