Throw error when word list file is empty and quick bug fix

This commit is contained in:
Oran Juice 2014-09-27 00:55:21 +05:30
parent 3c0e87e1b6
commit 262e155bab
No known key found for this signature in database
GPG key ID: 71C5AF46CCB28124
2 changed files with 40 additions and 12 deletions

View file

@ -63,6 +63,7 @@ namespace
{ {
words_array.clear(); words_array.clear();
words_map.clear(); words_map.clear();
num_words = 0;
std::ifstream input_stream; std::ifstream input_stream;
input_stream.open(word_file.c_str(), std::ifstream::in); input_stream.open(word_file.c_str(), std::ifstream::in);
@ -109,8 +110,8 @@ namespace crypto
} }
if (num_words == 0) if (num_words == 0)
{ {
throw std::runtime_error(std::string("Word list file is corrupt: ") + throw std::runtime_error(std::string("Word list file is empty: ") +
old_word_list ? OLD_WORD_FILE : (LANGUAGES_DIRECTORY + '/' + language)); (old_word_list ? OLD_WORD_FILE : (LANGUAGES_DIRECTORY + '/' + language)));
} }
} }
@ -128,13 +129,16 @@ namespace crypto
boost::split(wlist, words, boost::is_any_of(" ")); boost::split(wlist, words, boost::is_any_of(" "));
std::vector<std::string> languages; std::vector<std::string> languages;
get_language_list(languages);
std::vector<std::string>::iterator it; std::vector<std::string>::iterator it;
get_language_list(languages); for (it = languages.begin(); it != languages.end(); it++)
for (it = languages.begin(); it != languages.end() &&
!word_list_file_match(wlist); it++)
{ {
init(*it); init(*it);
if (word_list_file_match(wlist))
{
break;
}
} }
if (it == languages.end()) if (it == languages.end())
{ {

View file

@ -46,7 +46,7 @@
#include "version.h" #include "version.h"
#include "crypto/crypto.h" // for crypto::secret_key definition #include "crypto/crypto.h" // for crypto::secret_key definition
#include "mnemonics/electrum-words.h" #include "mnemonics/electrum-words.h"
#include <stdexcept>
#if defined(WIN32) #if defined(WIN32)
#include <crtdbg.h> #include <crtdbg.h>
@ -380,10 +380,18 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
} }
} }
if (!crypto::ElectrumWords::words_to_bytes(m_electrum_seed, m_recovery_key)) try
{ {
fail_msg_writer() << "electrum-style word list failed verification"; if (!crypto::ElectrumWords::words_to_bytes(m_electrum_seed, m_recovery_key))
return false; {
fail_msg_writer() << "electrum-style word list failed verification";
return false;
}
}
catch (std::runtime_error &e)
{
fail_msg_writer() << e.what() << std::endl;
return false;
} }
} }
bool r = new_wallet(m_wallet_file, pwd_container.password(), m_recovery_key, m_restore_deterministic_wallet, m_non_deterministic, testnet); bool r = new_wallet(m_wallet_file, pwd_container.password(), m_recovery_key, m_restore_deterministic_wallet, m_non_deterministic, testnet);
@ -490,13 +498,29 @@ bool simple_wallet::new_wallet(const string &wallet_file, const std::string& pas
// convert rng value to electrum-style word list // convert rng value to electrum-style word list
std::string electrum_words; std::string electrum_words;
if (m_restore_deterministic_wallet) if (!m_restore_deterministic_wallet)
{ {
// Ask for language only if it not a wallet restore. // Ask for language only if it not a wallet restore.
std::string mnemonic_language = get_mnemonic_language(); std::string mnemonic_language = get_mnemonic_language();
crypto::ElectrumWords::init(mnemonic_language); try
{
crypto::ElectrumWords::init(mnemonic_language);
}
catch (std::runtime_error &e)
{
fail_msg_writer() << e.what() << std::endl;
return false;
}
}
try
{
crypto::ElectrumWords::bytes_to_words(recovery_val, electrum_words);
}
catch (std::runtime_error &e)
{
fail_msg_writer() << e.what() << std::endl;
return false;
} }
crypto::ElectrumWords::bytes_to_words(recovery_val, electrum_words);
std::string print_electrum = ""; std::string print_electrum = "";