0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-13 11:25:02 -05:00

bugfix: make LoadWallet assigns status always

Although loadwallet() in rpcwallet.cpp assumes LoadWallet() always
assign some value to the 'status', but LoadWallet() does not do so
in some situation.

This fixes above and prevends loadwallet() returns ambiguous error code.
This commit is contained in:
Akio Nakamura 2020-09-09 01:11:20 +09:00
parent 564e1ab0f3
commit 8b39a87558
2 changed files with 4 additions and 0 deletions

View file

@ -212,6 +212,7 @@ enum class DatabaseStatus {
FAILED_ALREADY_EXISTS, FAILED_ALREADY_EXISTS,
FAILED_NOT_FOUND, FAILED_NOT_FOUND,
FAILED_CREATE, FAILED_CREATE,
FAILED_LOAD,
FAILED_VERIFY, FAILED_VERIFY,
FAILED_ENCRYPT, FAILED_ENCRYPT,
}; };

View file

@ -212,6 +212,7 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, const std:
std::shared_ptr<CWallet> wallet = CWallet::Create(chain, name, std::move(database), options.create_flags, error, warnings); std::shared_ptr<CWallet> wallet = CWallet::Create(chain, name, std::move(database), options.create_flags, error, warnings);
if (!wallet) { if (!wallet) {
error = Untranslated("Wallet loading failed.") + Untranslated(" ") + error; error = Untranslated("Wallet loading failed.") + Untranslated(" ") + error;
status = DatabaseStatus::FAILED_LOAD;
return nullptr; return nullptr;
} }
AddWallet(wallet); AddWallet(wallet);
@ -223,6 +224,7 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, const std:
return wallet; return wallet;
} catch (const std::runtime_error& e) { } catch (const std::runtime_error& e) {
error = Untranslated(e.what()); error = Untranslated(e.what());
status = DatabaseStatus::FAILED_LOAD;
return nullptr; return nullptr;
} }
} }
@ -233,6 +235,7 @@ std::shared_ptr<CWallet> LoadWallet(interfaces::Chain& chain, const std::string&
auto result = WITH_LOCK(g_loading_wallet_mutex, return g_loading_wallet_set.insert(name)); auto result = WITH_LOCK(g_loading_wallet_mutex, return g_loading_wallet_set.insert(name));
if (!result.second) { if (!result.second) {
error = Untranslated("Wallet already being loading."); error = Untranslated("Wallet already being loading.");
status = DatabaseStatus::FAILED_LOAD;
return nullptr; return nullptr;
} }
auto wallet = LoadWalletInternal(chain, name, load_on_start, options, status, error, warnings); auto wallet = LoadWalletInternal(chain, name, load_on_start, options, status, error, warnings);