Fix crash in nano_wallet when ran with --config option (#3546)

This commit is contained in:
theohax 2021-11-05 19:36:39 +02:00 committed by GitHub
commit a063100a0c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -74,11 +74,11 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost
boost::filesystem::create_directories (data_path); boost::filesystem::create_directories (data_path);
nano::set_secure_perm_directory (data_path, error_chmod); nano::set_secure_perm_directory (data_path, error_chmod);
QPixmap pixmap (":/logo.png"); QPixmap pixmap (":/logo.png");
QSplashScreen * splash = new QSplashScreen (pixmap); auto * splash = new QSplashScreen (pixmap);
splash->show (); splash->show ();
application.processEvents (); QApplication::processEvents ();
splash->showMessage (QSplashScreen::tr ("Remember - Back Up Your Wallet Seed"), Qt::AlignBottom | Qt::AlignHCenter, Qt::darkGray); splash->showMessage (QSplashScreen::tr ("Remember - Back Up Your Wallet Seed"), Qt::AlignBottom | Qt::AlignHCenter, Qt::darkGray);
application.processEvents (); QApplication::processEvents ();
nano::network_params network_params{ nano::network_constants::active_network }; nano::network_params network_params{ nano::network_constants::active_network };
nano::daemon_config config{ data_path, network_params }; nano::daemon_config config{ data_path, network_params };
@ -184,7 +184,7 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost
{ {
// Launch rpc in-process // Launch rpc in-process
nano::rpc_config rpc_config{ config.node.network_params.network }; nano::rpc_config rpc_config{ config.node.network_params.network };
auto error = nano::read_rpc_config_toml (data_path, rpc_config, flags.rpc_config_overrides); error = nano::read_rpc_config_toml (data_path, rpc_config, flags.rpc_config_overrides);
if (error) if (error)
{ {
splash->hide (); splash->hide ();
@ -228,13 +228,13 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost
#endif #endif
runner.stop_event_processing (); runner.stop_event_processing ();
}); });
application.postEvent (&processor, new nano_qt::eventloop_event ([&] () { QApplication::postEvent (&processor, new nano_qt::eventloop_event ([&] () {
gui = std::make_shared<nano_qt::wallet> (application, processor, *node, wallet, wallet_config.account); gui = std::make_shared<nano_qt::wallet> (application, processor, *node, wallet, wallet_config.account);
splash->close (); splash->close ();
gui->start (); gui->start ();
gui->client_window->show (); gui->client_window->show ();
})); }));
result = application.exec (); result = QApplication::exec ();
runner.join (); runner.join ();
} }
else else
@ -256,9 +256,11 @@ int main (int argc, char * const * argv)
{ {
nano::set_umask (); nano::set_umask ();
nano::node_singleton_memory_pool_purge_guard memory_pool_cleanup_guard; nano::node_singleton_memory_pool_purge_guard memory_pool_cleanup_guard;
QApplication application (argc, const_cast<char **> (argv));
try try
{ {
QApplication application (argc, const_cast<char **> (argv));
boost::program_options::options_description description ("Command line options"); boost::program_options::options_description description ("Command line options");
// clang-format off // clang-format off
description.add_options() description.add_options()
@ -292,9 +294,10 @@ int main (int argc, char * const * argv)
} }
std::vector<std::string> config_overrides; std::vector<std::string> config_overrides;
if (vm.count ("config")) const auto configItr = vm.find ("config");
if (configItr != vm.cend ())
{ {
config_overrides = vm["config"].as<std::vector<std::string>> (); config_overrides = nano::config_overrides (configItr->second.as<std::vector<nano::config_key_value_pair>> ());
} }
auto ec = nano::handle_node_options (vm); auto ec = nano::handle_node_options (vm);