Bug 795276 - Invalid date on price stops file from being parsed.

Instead of reporting an error and declining to load the file (XML)
or failing to enter a value (SQL) when a bad date is found in the
database, use a 0 time stamp (1970-01-01 00:00:00 UTC). Adds a warning
in SQL backends; there was one already in XML.
This commit is contained in:
John Ralls 2018-06-12 14:53:27 -07:00
parent 9179505208
commit c8861d4666
8 changed files with 12 additions and 9 deletions

View File

@ -401,7 +401,9 @@ GncSqlColumnTableEntryImpl<CT_TIMESPEC>::load (const GncSqlBackend* sql_be,
}
catch (std::invalid_argument&)
{
return;
PWARN("An invalid date was found in your database."
"It has been set to 1 January 1970.");
ts.tv_sec = 0;
}
}
set_parameter(pObject, &ts,

View File

@ -244,7 +244,7 @@ set_time64 (xmlNodePtr node, GncEntry* entry,
void (*func) (GncEntry* entry, time64 ts))
{
time64 time = dom_tree_to_time64 (node);
if (!dom_tree_valid_time64 (time, node->name)) return FALSE;
if (!dom_tree_valid_time64 (time, node->name)) time = 0;
func (entry, time);
return TRUE;
}

View File

@ -188,7 +188,7 @@ set_time64 (xmlNodePtr node, GncInvoice* invoice,
void (*func) (GncInvoice* invoice, time64 time))
{
time64 time = dom_tree_to_time64 (node);
if (!dom_tree_valid_time64 (time, node->name)) return FALSE;
if (!dom_tree_valid_time64 (time, node->name)) time = 0;
func (invoice, time);
return TRUE;
}

View File

@ -135,7 +135,7 @@ set_time64 (xmlNodePtr node, GncOrder* order,
void (*func) (GncOrder* order, time64 tt))
{
time64 time = dom_tree_to_time64 (node);
if (!dom_tree_valid_time64 (time, node->name)) return FALSE;
if (!dom_tree_valid_time64 (time, node->name)) time = 0;
func (order, time);
return TRUE;
}

View File

@ -114,7 +114,7 @@ price_parse_xml_sub_node (GNCPrice* p, xmlNodePtr sub_node, QofBook* book)
else if (g_strcmp0 ("price:time", (char*)sub_node->name) == 0)
{
time64 time = dom_tree_to_time64 (sub_node);
if (!dom_tree_valid_time64 (time, sub_node->name)) return FALSE;
if (!dom_tree_valid_time64 (time, sub_node->name)) time = 0;
Timespec ts {time, 0};
gnc_price_set_time (p, ts);
}

View File

@ -283,7 +283,7 @@ spl_reconcile_date_handler (xmlNodePtr node, gpointer data)
{
struct split_pdata* pdata = static_cast<decltype (pdata)> (data);
time64 time = dom_tree_to_time64 (node);
if (!dom_tree_valid_time64 (time, node->name)) return FALSE;
if (!dom_tree_valid_time64 (time, node->name)) time = 0;
xaccSplitSetDateReconciledSecs (pdata->split, time);
return TRUE;
}
@ -438,7 +438,7 @@ set_tran_time64 (xmlNodePtr node, Transaction * trn,
void (*func) (Transaction *, time64))
{
time64 time = dom_tree_to_time64 (node);
if (!dom_tree_valid_time64 (time, node->name)) return FALSE;
if (!dom_tree_valid_time64 (time, node->name)) time = 0;
func (trn, time);
return TRUE;
}
@ -448,7 +448,7 @@ set_tran_date (xmlNodePtr node, Transaction* trn,
void (*func) (Transaction* trn, const Timespec* tm))
{
time64 time = dom_tree_to_time64 (node);
if (!dom_tree_valid_time64 (time, node->name)) return FALSE;
if (!dom_tree_valid_time64 (time, node->name)) time = 0;
Timespec ts {time, 0};
func (trn, &ts);
return TRUE;

View File

@ -2960,7 +2960,7 @@ price_parse_xml_sub_node (GNCPrice* p, xmlNodePtr sub_node, QofBook* book)
else if (g_strcmp0 ("price:time", (char*)sub_node->name) == 0)
{
time64 time = dom_tree_to_time64 (sub_node);
if (!dom_tree_valid_time64 (time, sub_node->name)) return FALSE;
if (!dom_tree_valid_time64 (time, sub_node->name)) time = 0;
Timespec ts = {time, 0};
gnc_price_set_time (p, ts);
}

View File

@ -575,6 +575,7 @@ libgnucash/backend/sql/gnc-sql-result.cpp
libgnucash/backend/sql/gnc-tax-table-sql.cpp
libgnucash/backend/sql/gnc-transaction-sql.cpp
libgnucash/backend/sql/gnc-vendor-sql.cpp
libgnucash/backend/xml/.#gnc-invoice-xml-v2.cpp
libgnucash/backend/xml/gnc-account-xml-v2.cpp
libgnucash/backend/xml/gnc-address-xml-v2.cpp
libgnucash/backend/xml/gnc-backend-xml.cpp