From 922d18d70647cac6e4ef0797e35f59ddbdbb480c Mon Sep 17 00:00:00 2001 From: Linas Vepstas Date: Wed, 7 Jul 2004 02:59:28 +0000 Subject: [PATCH] add code to make sure that split amount and value are valid numbers. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@10174 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/engine/Scrub.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/engine/Scrub.c b/src/engine/Scrub.c index 881602f6c6..7e1a77d9ac 100644 --- a/src/engine/Scrub.c +++ b/src/engine/Scrub.c @@ -198,13 +198,22 @@ xaccAccountScrubSplits (Account *account) void xaccTransScrubSplits (Transaction *trans) { + gnc_commodity *currency; GList *node; - if (!trans) - return; + if (!trans) return; + + /* The split scrub expects the transaction to have a currency! */ + currency = xaccTransGetCurrency (trans); + if (!currency) + { + PERR ("Transaction doesn't have a currency!"); + } for (node = trans->splits; node; node = node->next) + { xaccSplitScrub (node->data); + } } void @@ -212,7 +221,7 @@ xaccSplitScrub (Split *split) { Account *account; Transaction *trans; - gnc_numeric value; + gnc_numeric value, amount; gnc_commodity *currency; int scu; @@ -243,6 +252,21 @@ xaccSplitScrub (Split *split) return; } + /* Split amounts and values should be valid numbers */ + value = xaccSplitGetValue (split); + if (gnc_numeric_check (value)) + { + value = gnc_numeric_zero(); + xaccSplitSetValue (split, value); + } + + amount = xaccSplitGetAmount (split); + if (gnc_numeric_check (amount)) + { + amount = gnc_numeric_zero(); + xaccSplitSetAmount (split, amount); + } + currency = xaccTransGetCurrency (trans); /* If the account doesn't have a commodity, @@ -262,10 +286,7 @@ xaccSplitScrub (Split *split) scu = MIN (xaccAccountGetCommoditySCU (account), gnc_commodity_get_fraction (currency)); - value = xaccSplitGetValue (split); - - if (gnc_numeric_same (xaccSplitGetAmount (split), - value, scu, GNC_HOW_RND_ROUND)) + if (gnc_numeric_same (amount, value, scu, GNC_HOW_RND_ROUND)) { return; }