string_to_gnc_numeric returns a nullptr if the GncNumeric string
constructor decides that the denominator is 0. The 2.6 version of the
function didn't check for this and occasionally stored error values.
Convert that to gnc_numeric_zero to allow the file to be processed.
Mingw-w64 linker uses $PATH instead of $LD_LIBRARY_PATH for finding
shared libraries. Both the linker and Guile itself need MSys/Unix style
paths with the drive letter as a top-level directory, forward slashes,
and separated with ':' while CMake wants Windows-style paths separated
with ';'.
Payment dialogs sort to beginning of day and do not honor NUM field for
custom sorting.
Do a two-step, first retrieving a GDate from the date_edit then use
gdate_to_timespec to convert it to a time64: gdate_to_timespec calls
gnc_dmy2timespec_neutral while gnc_date_edit_get_date_ts gets a
begining-of-the-day time.
Price and that already exists in the Price DB
Should have crashed regardless: The pricedb takes ownership of the
price object and unreffing it is going to cause trouble eventually.
tock Split Assistant crashes GnuCash if you enter a New Price and that
already exists in the Price DB
Fixes a bug reported on the mailing list wherein a date of 0000-00-00
in a MySql database would crash GnuCash. Such dates may come from a bad
conversion of 1970-01-01 or from a crash.
Null tip_list after freeing it the first time to prevent double-free,
then don't iterate over it if contents is NULL. Don't even try to open
dialog if tip_count < 1. Protect from dereferencing a NULL tip_list in
gnc_new_tip_number.
Mike Alexander brought this up with a test case that failed to round down
sufficiently; he found that reducing the rounding denominator by 2 sufficed
to make his test case pass.
In fact the sizing of the replacement denominator by shifting the larger of
the numerator or denominator by an arbitrary 62 bits was not correct most
of the time, so instead we begin with a shift of the full lower leg worth,
try to do the conversion, and if the conversion is still “big” shift the
larger value one more and try the operation again, repeating until the
result will fit in a GncNumeric.
Fixing Bug 779217 increased the maximum denominator by 10, and that led
to overflows when converting large numbers' denominators from 100 to the
new max.
Correct the cell save routine so that the "numeric" kvp is correctly
overwritten in all instances when an edit changes its value for both
credit and debit splits. The both part is accomplished by extracting the
overwrite function.
Also provide a scrub to correct all of the incorrect files.
Unfortunately the necessary calculation function is in app-utils so
running the scrub from the backend as usual isn't possible, so we run it
from gnc_post_file_open in gnome-utils/gnc-file.c instead.
Total Debits Issue re $0 Commodity Accounts and Price Source Mode Set to
"Nearest in Time" or "Most Recent"
There was a silent error from gnc-numeric-sub-fixed in
collect-unrealized-gains because a 0 value wasn't getting its
denominator set in the gnc-numeric-mul call in
gnc:exchange-by-pricedb-helper. While this is ultimately a flaw in
gnc-numeric, this commit works around it by forcing the value to the
correct denom in gnc:make-commodity-collector.
Remove incorrect week adjustments for determining n for nth weekday
from a recurrence date when day % 7 == 0. Adjustment is only needed
in nth_weekday_compare because that function then adds 7 to the result.
The symptom was that in 2017 the PDT->PST transition was set a week
late. The cause was that the timezone lookup function went the wrong
way, finding the *next* timezone rule instead of the desired one because
timezone rules are stored for the year that they start rather than when
they end. Fix reverses the search to find the correct timezone rule.
Commit includes new tests to detect the problem.
xaccSplitSetValue and xaccSplitSetAmount round to the denominator found by
get_currency_denom and get_commodity_denom. The problem was that if the
commodity was unfindable because either the split’s parent or account hadn’t
been set (as is the case during loading, because the parent isn’t yet complete)
the returned denominator would be 100000, smaller than the max supported.
That would cause the value/amount to be prematurely rounded.
Guard against recursively calling the account doesn’t exist query or creation
dialog if one is already in the account creation dialog.
The underlying problem is that creating the dialog forces a UI update that
in turn sets the cell value and checks for the existence of the account.
In basic view the cell being displayed (“transfer”) isn’t the one being
changed (“account”) so the account check isn’t invoked, but in
multi-split view the “account” cell *is* displayed so the check is invoked
again.
Apparently gcc V4.8 provides a defective implementation of
std::locale which first doesn't support std::numpunct and second
throws the wrong exception type.
Unfortunately boost::locale isn't a solution because it uses the
gcc facets.
So for now, we don't compile that bit if gcc is too old.
To allow for a difference of 1 on very large numbers (>1e16). At the
same time made the test harder with a wider range, skipping cases where
the result overflows. Use GncRational::valid() instead of testing
components for both overflow and NaN.