Auto merge of #2741 - bitcartel:stop_dumpwallet_overwriting, r=str4d
Prevent RPC calls dumpwallet and z_exportwallet from overwriting an existing file Closes #2740
This commit is contained in:
commit
019c4bddc8
|
@ -34,6 +34,7 @@ and confirm again balances are correct.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from test_framework.test_framework import BitcoinTestFramework
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
|
from test_framework.authproxy import JSONRPCException
|
||||||
from test_framework.util import assert_equal, initialize_chain_clean, \
|
from test_framework.util import assert_equal, initialize_chain_clean, \
|
||||||
start_nodes, start_node, connect_nodes, stop_node, \
|
start_nodes, start_node, connect_nodes, stop_node, \
|
||||||
sync_blocks, sync_mempools
|
sync_blocks, sync_mempools
|
||||||
|
@ -141,6 +142,14 @@ class WalletBackupTest(BitcoinTestFramework):
|
||||||
self.nodes[2].backupwallet("walletbak")
|
self.nodes[2].backupwallet("walletbak")
|
||||||
self.nodes[2].dumpwallet("walletdump")
|
self.nodes[2].dumpwallet("walletdump")
|
||||||
|
|
||||||
|
# Verify dumpwallet cannot overwrite an existing file
|
||||||
|
try:
|
||||||
|
self.nodes[2].dumpwallet("walletdump")
|
||||||
|
assert(False)
|
||||||
|
except JSONRPCException as e:
|
||||||
|
errorString = e.error['message']
|
||||||
|
assert("Cannot overwrite existing file" in errorString)
|
||||||
|
|
||||||
logging.info("More transactions")
|
logging.info("More transactions")
|
||||||
for i in range(5):
|
for i in range(5):
|
||||||
self.do_one_round()
|
self.do_one_round()
|
||||||
|
|
|
@ -428,7 +428,7 @@ UniValue z_exportwallet(const UniValue& params, bool fHelp)
|
||||||
if (fHelp || params.size() != 1)
|
if (fHelp || params.size() != 1)
|
||||||
throw runtime_error(
|
throw runtime_error(
|
||||||
"z_exportwallet \"filename\"\n"
|
"z_exportwallet \"filename\"\n"
|
||||||
"\nExports all wallet keys, for taddr and zaddr, in a human-readable format.\n"
|
"\nExports all wallet keys, for taddr and zaddr, in a human-readable format. Overwriting an existing file is not permitted.\n"
|
||||||
"\nArguments:\n"
|
"\nArguments:\n"
|
||||||
"1. \"filename\" (string, required) The filename, saved in folder set by zcashd -exportdir option\n"
|
"1. \"filename\" (string, required) The filename, saved in folder set by zcashd -exportdir option\n"
|
||||||
"\nResult:\n"
|
"\nResult:\n"
|
||||||
|
@ -449,7 +449,7 @@ UniValue dumpwallet(const UniValue& params, bool fHelp)
|
||||||
if (fHelp || params.size() != 1)
|
if (fHelp || params.size() != 1)
|
||||||
throw runtime_error(
|
throw runtime_error(
|
||||||
"dumpwallet \"filename\"\n"
|
"dumpwallet \"filename\"\n"
|
||||||
"\nDumps taddr wallet keys in a human-readable format.\n"
|
"\nDumps taddr wallet keys in a human-readable format. Overwriting an existing file is not permitted.\n"
|
||||||
"\nArguments:\n"
|
"\nArguments:\n"
|
||||||
"1. \"filename\" (string, required) The filename, saved in folder set by zcashd -exportdir option\n"
|
"1. \"filename\" (string, required) The filename, saved in folder set by zcashd -exportdir option\n"
|
||||||
"\nResult:\n"
|
"\nResult:\n"
|
||||||
|
@ -484,6 +484,10 @@ UniValue dumpwallet_impl(const UniValue& params, bool fHelp, bool fDumpZKeys)
|
||||||
}
|
}
|
||||||
boost::filesystem::path exportfilepath = exportdir / clean;
|
boost::filesystem::path exportfilepath = exportdir / clean;
|
||||||
|
|
||||||
|
if (boost::filesystem::exists(exportfilepath)) {
|
||||||
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot overwrite existing file " + exportfilepath.string());
|
||||||
|
}
|
||||||
|
|
||||||
ofstream file;
|
ofstream file;
|
||||||
file.open(exportfilepath.string().c_str());
|
file.open(exportfilepath.string().c_str());
|
||||||
if (!file.is_open())
|
if (!file.is_open())
|
||||||
|
|
Loading…
Reference in New Issue