Fix crash in importwallet and dumpwallet formatting
- DecodeDumpTime was passing a statically allocated facet object to
std::locale. However, "The constructed locale object takes over
responsibility for deleting this facet object." causing a free()
crash on scope exit. Fixes #3670.
- EncodeDumpTime was using the wrong format character for dates
(appears accidentally introduced in 51ed9ec9
)
This commit is contained in:
parent
129429dd8f
commit
a143d4ce58
1 changed files with 3 additions and 3 deletions
|
@ -23,13 +23,13 @@ using namespace std;
|
||||||
void EnsureWalletIsUnlocked();
|
void EnsureWalletIsUnlocked();
|
||||||
|
|
||||||
std::string static EncodeDumpTime(int64_t nTime) {
|
std::string static EncodeDumpTime(int64_t nTime) {
|
||||||
return DateTimeStrFormat("%Y-%m-%"PRId64"T%H:%M:%SZ", nTime);
|
return DateTimeStrFormat("%Y-%m-%dT%H:%M:%SZ", nTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t static DecodeDumpTime(const std::string &str) {
|
int64_t static DecodeDumpTime(const std::string &str) {
|
||||||
static boost::posix_time::time_input_facet facet("%Y-%m-%dT%H:%M:%SZ");
|
|
||||||
static const boost::posix_time::ptime epoch = boost::posix_time::from_time_t(0);
|
static const boost::posix_time::ptime epoch = boost::posix_time::from_time_t(0);
|
||||||
const std::locale loc(std::locale::classic(), &facet);
|
static const std::locale loc(std::locale::classic(),
|
||||||
|
new boost::posix_time::time_input_facet("%Y-%m-%dT%H:%M:%SZ"));
|
||||||
std::istringstream iss(str);
|
std::istringstream iss(str);
|
||||||
iss.imbue(loc);
|
iss.imbue(loc);
|
||||||
boost::posix_time::ptime ptime(boost::date_time::not_a_date_time);
|
boost::posix_time::ptime ptime(boost::date_time::not_a_date_time);
|
||||||
|
|
Loading…
Reference in a new issue