aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/i18n.cpp14
-rw-r--r--src/cryptonote_core/blockchain.cpp3
-rw-r--r--src/ringct/rctSigs.cpp1
-rw-r--r--src/wallet/message_store.h1
-rw-r--r--tests/core_tests/chaingen.h4
-rw-r--r--tests/core_tests/chaingen_main.cpp14
6 files changed, 30 insertions, 7 deletions
diff --git a/src/common/i18n.cpp b/src/common/i18n.cpp
index ffe8d8b52..a32875945 100644
--- a/src/common/i18n.cpp
+++ b/src/common/i18n.cpp
@@ -38,6 +38,8 @@
#undef MONERO_DEFAULT_LOG_CATEGORY
#define MONERO_DEFAULT_LOG_CATEGORY "i18n"
+#define MAX_LANGUAGE_SIZE 16
+
static const unsigned char qm_magic[16] = {0x3c, 0xb8, 0x64, 0x18, 0xca, 0xef, 0x9c, 0x95, 0xcd, 0x21, 0x1c, 0xbf, 0x60, 0xa1, 0xbd, 0xdd};
static std::map<std::string,std::string> i18n_entries;
@@ -62,7 +64,19 @@ std::string i18n_get_language()
std::string language = e;
language = language.substr(0, language.find("."));
+ language = language.substr(0, language.find("@"));
+
+ // check valid values
+ for (char c: language)
+ if (!strchr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-.@", c))
+ return "en";
+
std::transform(language.begin(), language.end(), language.begin(), tolower);
+ if (language.size() > MAX_LANGUAGE_SIZE)
+ {
+ i18n_log("Language from LANG/LC_ALL suspiciously long, defaulting to en");
+ return "en";
+ }
return language;
}
diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp
index d8163721e..a108124a8 100644
--- a/src/cryptonote_core/blockchain.cpp
+++ b/src/cryptonote_core/blockchain.cpp
@@ -173,7 +173,8 @@ Blockchain::Blockchain(tx_memory_pool& tx_pool) :
//------------------------------------------------------------------
Blockchain::~Blockchain()
{
- deinit();
+ try { deinit(); }
+ catch (const std::exception &e) { /* ignore */ }
}
//------------------------------------------------------------------
bool Blockchain::have_tx(const crypto::hash &id) const
diff --git a/src/ringct/rctSigs.cpp b/src/ringct/rctSigs.cpp
index 316f0e5e8..c5c6db3c1 100644
--- a/src/ringct/rctSigs.cpp
+++ b/src/ringct/rctSigs.cpp
@@ -871,7 +871,6 @@ namespace rct {
sc_add(sumpouts.bytes, a[i].bytes, sumpouts.bytes);
genC(pseudoOuts[i], a[i], inamounts[i]);
}
- rv.mixRing = mixRing;
sc_sub(a[i].bytes, sumout.bytes, sumpouts.bytes);
genC(pseudoOuts[i], a[i], inamounts[i]);
DP(pseudoOuts[i]);
diff --git a/src/wallet/message_store.h b/src/wallet/message_store.h
index 7d26f7889..637bd29a1 100644
--- a/src/wallet/message_store.h
+++ b/src/wallet/message_store.h
@@ -135,6 +135,7 @@ namespace mms
{
monero_address_known = false;
memset(&monero_address, 0, sizeof(cryptonote::account_public_address));
+ me = false;
index = 0;
auto_config_public_key = crypto::null_pkey;
auto_config_secret_key = crypto::null_skey;
diff --git a/tests/core_tests/chaingen.h b/tests/core_tests/chaingen.h
index b380aca01..907b32bcd 100644
--- a/tests/core_tests/chaingen.h
+++ b/tests/core_tests/chaingen.h
@@ -669,7 +669,9 @@ inline bool do_replay_file(const std::string& filename)
}
#define GENERATE_AND_PLAY(genclass) \
- if (filter.empty() || boost::regex_match(std::string(#genclass), match, boost::regex(filter))) \
+ if (list_tests) \
+ std::cout << #genclass << std::endl; \
+ else if (filter.empty() || boost::regex_match(std::string(#genclass), match, boost::regex(filter))) \
{ \
std::vector<test_event_entry> events; \
++tests_count; \
diff --git a/tests/core_tests/chaingen_main.cpp b/tests/core_tests/chaingen_main.cpp
index 455bb1efa..71b8c4463 100644
--- a/tests/core_tests/chaingen_main.cpp
+++ b/tests/core_tests/chaingen_main.cpp
@@ -44,6 +44,7 @@ namespace
const command_line::arg_descriptor<bool> arg_generate_and_play_test_data = {"generate_and_play_test_data", ""};
const command_line::arg_descriptor<bool> arg_test_transactions = {"test_transactions", ""};
const command_line::arg_descriptor<std::string> arg_filter = { "filter", "Regular expression filter for which tests to run" };
+ const command_line::arg_descriptor<bool> arg_list_tests = {"list_tests", ""};
}
int main(int argc, char* argv[])
@@ -64,6 +65,7 @@ int main(int argc, char* argv[])
command_line::add_arg(desc_options, arg_generate_and_play_test_data);
command_line::add_arg(desc_options, arg_test_transactions);
command_line::add_arg(desc_options, arg_filter);
+ command_line::add_arg(desc_options, arg_list_tests);
po::variables_map vm;
bool r = command_line::handle_error_helper(desc_options, [&]()
@@ -87,6 +89,7 @@ int main(int argc, char* argv[])
size_t tests_count = 0;
std::vector<std::string> failed_tests;
std::string tests_folder = command_line::get_arg(vm, arg_test_data_path);
+ bool list_tests = false;
if (command_line::get_arg(vm, arg_generate_test_data))
{
GENERATE("chain001.dat", gen_simple_chain_001);
@@ -95,7 +98,7 @@ int main(int argc, char* argv[])
{
PLAY("chain001.dat", gen_simple_chain_001);
}
- else if (command_line::get_arg(vm, arg_generate_and_play_test_data))
+ else if (command_line::get_arg(vm, arg_generate_and_play_test_data) || (list_tests = command_line::get_arg(vm, arg_list_tests)))
{
GENERATE_AND_PLAY(gen_simple_chain_001);
GENERATE_AND_PLAY(gen_simple_chain_split_1);
@@ -251,9 +254,12 @@ int main(int argc, char* argv[])
GENERATE_AND_PLAY(gen_bp_tx_invalid_borromean_type);
el::Level level = (failed_tests.empty() ? el::Level::Info : el::Level::Error);
- MLOG(level, "\nREPORT:");
- MLOG(level, " Test run: " << tests_count);
- MLOG(level, " Failures: " << failed_tests.size());
+ if (!list_tests)
+ {
+ MLOG(level, "\nREPORT:");
+ MLOG(level, " Test run: " << tests_count);
+ MLOG(level, " Failures: " << failed_tests.size());
+ }
if (!failed_tests.empty())
{
MLOG(level, "FAILED TESTS:");