diff --git a/libgnucash/engine/gnc-optiondb.cpp b/libgnucash/engine/gnc-optiondb.cpp index 117848fdd2..ba08e05eeb 100644 --- a/libgnucash/engine/gnc-optiondb.cpp +++ b/libgnucash/engine/gnc-optiondb.cpp @@ -512,10 +512,25 @@ GncOptionDB::load_from_kvp(QofBook* book) noexcept auto kvp = qof_book_get_option(book, &list_head); if (!kvp) return; + + auto set_double = [&option, kvp, &list_head]() { + /*counters might have been set as doubles + * because of + * https://bugs.gnucash.org/show_bug.cgi?id=798930. They + * should be int64_t. + */ + constexpr const char *counters{"counters"}; + auto value{kvp->get()}; + if (strcmp(static_cast(list_head.data), counters) == 0) + option.set_value(static_cast(value)); + else + option.set_value(value); + }; + switch (kvp->get_type()) { case KvpValue::Type::DOUBLE: - option.set_value(kvp->get()); + set_double(); break; case KvpValue::Type::INT64: option.set_value(kvp->get()); diff --git a/libgnucash/engine/qofbook.cpp b/libgnucash/engine/qofbook.cpp index a049535dec..13bdb71f5d 100644 --- a/libgnucash/engine/qofbook.cpp +++ b/libgnucash/engine/qofbook.cpp @@ -591,8 +591,13 @@ qof_book_get_counter (QofBook *book, const char *counter_name) value = kvp->get_slot({"counters", counter_name}); if (value) { - /* found it */ - return value->get(); + auto int_value{value->get()}; + /* Might be a double because of + * https://bugs.gnucash.org/show_bug.cgi?id=798930 + */ + if (!int_value) + int_value = static_cast(value->get()); + return int_value; } else {