From 2884c4da020b8ecb9cf32fc4c30c54751cbe5c0a Mon Sep 17 00:00:00 2001 From: Aditya Kulkarni Date: Tue, 8 Oct 2019 10:22:46 -0700 Subject: [PATCH] Prevent crash if no conn exists --- src/zcashdrpc.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 70 insertions(+), 4 deletions(-) diff --git a/src/zcashdrpc.cpp b/src/zcashdrpc.cpp index ded1261..52968ad 100644 --- a/src/zcashdrpc.cpp +++ b/src/zcashdrpc.cpp @@ -21,6 +21,9 @@ bool ZcashdRPC::haveConnection() { } void ZcashdRPC::fetchTAddresses(const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -32,6 +35,9 @@ void ZcashdRPC::fetchTAddresses(const std::function& cb) { } void ZcashdRPC::fetchZAddresses(const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -42,6 +48,9 @@ void ZcashdRPC::fetchZAddresses(const std::function& cb) { } void ZcashdRPC::fetchTransparentUnspent(const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -53,6 +62,9 @@ void ZcashdRPC::fetchTransparentUnspent(const std::function& cb) { } void ZcashdRPC::fetchZUnspent(const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -64,6 +76,9 @@ void ZcashdRPC::fetchZUnspent(const std::function& cb) { } void ZcashdRPC::createNewZaddr(bool sapling, const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -75,6 +90,9 @@ void ZcashdRPC::createNewZaddr(bool sapling, const std::function& cb } void ZcashdRPC::createNewTaddr(const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -85,6 +103,9 @@ void ZcashdRPC::createNewTaddr(const std::function& cb) { } void ZcashdRPC::fetchZPrivKey(QString addr, const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -96,6 +117,9 @@ void ZcashdRPC::fetchZPrivKey(QString addr, const std::function& cb) } void ZcashdRPC::fetchTPrivKey(QString addr, const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -107,6 +131,9 @@ void ZcashdRPC::fetchTPrivKey(QString addr, const std::function& cb) } void ZcashdRPC::importZPrivKey(QString addr, bool rescan, const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -119,6 +146,9 @@ void ZcashdRPC::importZPrivKey(QString addr, bool rescan, const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -130,6 +160,9 @@ void ZcashdRPC::importTPrivKey(QString addr, bool rescan, const std::function& cb) { + if (conn == nullptr) + return; + QString method = Settings::isZAddress(address) ? "z_validateaddress" : "validateaddress"; json payload = { @@ -143,6 +176,9 @@ void ZcashdRPC::validateAddress(QString address, const std::function } void ZcashdRPC::fetchBalance(const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -154,6 +190,9 @@ void ZcashdRPC::fetchBalance(const std::function& cb) { } void ZcashdRPC::fetchTransactions(const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -165,6 +204,9 @@ void ZcashdRPC::fetchTransactions(const std::function& cb) { void ZcashdRPC::sendZTransaction(json params, const std::function& cb, const std::function& err) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -183,7 +225,10 @@ void ZcashdRPC::sendZTransaction(json params, const std::function& c void ZcashdRPC::fetchInfo(const std::function& cb, const std::function& err) { - json payload = { + if (conn == nullptr) + return; + + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, {"method", "getinfo"} @@ -193,6 +238,9 @@ void ZcashdRPC::fetchInfo(const std::function& cb, } void ZcashdRPC::fetchBlockchainInfo(const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -203,6 +251,9 @@ void ZcashdRPC::fetchBlockchainInfo(const std::function& cb) { } void ZcashdRPC::fetchNetSolOps(const std::function cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -216,6 +267,9 @@ void ZcashdRPC::fetchNetSolOps(const std::function cb) { } void ZcashdRPC::fetchMigrationStatus(const std::function& cb) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -227,6 +281,9 @@ void ZcashdRPC::fetchMigrationStatus(const std::function& cb) { void ZcashdRPC::setMigrationStatus(bool enabled) { + if (conn == nullptr) + return; + json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -328,6 +385,9 @@ void ZcashdRPC::fetchAllPrivKeys(const std::function& cb) { + if (conn == nullptr) + return; + // Make an RPC to load pending operation statues json payload = { {"jsonrpc", "1.0"}, @@ -340,7 +400,10 @@ void ZcashdRPC::fetchOpStatus(const std::function& cb) { void ZcashdRPC::fetchReceivedTTrans(QList txids, QList sentZTxs, const std::function)> txdataFn) { - // Look up all the txids to get the confirmation count for them. + if (conn == nullptr) + return; + + // Look up all the txids to get the confirmation count for them. conn->doBatchRPC(txids, [=] (QString txid) { json payload = { @@ -377,7 +440,10 @@ void ZcashdRPC::fetchReceivedTTrans(QList txids, QList // Refresh received z txs by calling z_listreceivedbyaddress/gettransaction void ZcashdRPC::fetchReceivedZTrans(QList zaddrs, const std::function usedAddrFn, const std::function)> txdataFn) { - + if (conn == nullptr) + return; + + // This method is complicated because z_listreceivedbyaddress only returns the txid, and // we have to make a follow up call to gettransaction to get details of that transaction. // Additionally, it has to be done in batches, because there are multiple z-Addresses, @@ -476,4 +542,4 @@ void ZcashdRPC::fetchReceivedZTrans(QList zaddrs, const std::function