From fce7260811cea4cb3fc3d423a559664b42a27909 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 3 Jan 2017 12:50:19 -0800 Subject: [PATCH] Fixes #1964 to catch general exception in z_sendmany and catch exceptions as reference-to-const. --- src/wallet/asyncrpcoperation_sendmany.cpp | 13 ++++++++----- src/wallet/rpcwallet.cpp | 8 ++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index c65664eae..4cd7ab804 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -86,7 +86,7 @@ AsyncRPCOperation_sendmany::AsyncRPCOperation_sendmany( isfromzaddr_ = true; frompaymentaddress_ = addr; spendingkey_ = key; - } catch (std::runtime_error e) { + } catch (const std::runtime_error& e) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("runtime error: ") + e.what()); } } @@ -106,17 +106,20 @@ void AsyncRPCOperation_sendmany::main() { try { success = main_impl(); - } catch (Object objError) { + } catch (const Object& objError) { int code = find_value(objError, "code").get_int(); std::string message = find_value(objError, "message").get_str(); set_error_code(code); set_error_message(message); - } catch (runtime_error e) { + } catch (const runtime_error& e) { set_error_code(-1); set_error_message("runtime error: " + string(e.what())); - } catch (logic_error e) { + } catch (const logic_error& e) { set_error_code(-1); set_error_message("logic error: " + string(e.what())); + } catch (const exception& e) { + set_error_code(-1); + set_error_message("general exception: " + string(e.what())); } catch (...) { set_error_code(-2); set_error_message("unknown error"); @@ -577,7 +580,7 @@ bool AsyncRPCOperation_sendmany::main_impl() { FormatMoney(plaintext.value, false) ); - } catch (const std::exception e) { + } catch (const std::exception& e) { throw JSONRPCError(RPC_WALLET_ERROR, strprintf("Error decrypting output note of previous JoinSplit: %s", e.what())); } } diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 6b0f5f528..dc1bd9aff 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -2955,7 +2955,7 @@ Value z_listreceivedbyaddress(const Array& params, bool fHelp) CZCPaymentAddress address(fromaddress); try { zaddr = address.Get(); - } catch (std::runtime_error) { + } catch (const std::runtime_error&) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid zaddr."); } @@ -3022,7 +3022,7 @@ Value z_getbalance(const Array& params, bool fHelp) CZCPaymentAddress address(fromaddress); try { zaddr = address.Get(); - } catch (std::runtime_error) { + } catch (const std::runtime_error&) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid from address, should be a taddr or zaddr."); } if (!pwalletMain->HaveSpendingKey(zaddr)) { @@ -3226,7 +3226,7 @@ Value z_sendmany(const Array& params, bool fHelp) CZCPaymentAddress address(fromaddress); try { zaddr = address.Get(); - } catch (std::runtime_error) { + } catch (const std::runtime_error&) { // invalid throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid from address, should be a taddr or zaddr."); } @@ -3273,7 +3273,7 @@ Value z_sendmany(const Array& params, bool fHelp) CZCPaymentAddress zaddr(address); zaddr.Get(); isZaddr = true; - } catch (std::runtime_error) { + } catch (const std::runtime_error&) { throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, unknown address format: ")+address ); } }