gnucash master: Multiple changes pushed
John Ralls
jralls at code.gnucash.org
Thu Jan 12 19:56:08 EST 2017
Updated via https://github.com/Gnucash/gnucash/commit/1ce1aff0 (commit)
via https://github.com/Gnucash/gnucash/commit/3a794e75 (commit)
from https://github.com/Gnucash/gnucash/commit/176bc89e (commit)
commit 1ce1aff014090996cb81858c4858e7b8c5c1354d
Author: John Ralls <jralls at ceridwen.us>
Date: Thu Jan 12 16:55:45 2017 -0800
Prevent leaking exceptions from gnc_dmy2timespec_neutral
And test out-of-range values in other functions for good measure.
diff --git a/src/libqof/qof/gnc-date.cpp b/src/libqof/qof/gnc-date.cpp
index 899880a..4d21ef7 100644
--- a/src/libqof/qof/gnc-date.cpp
+++ b/src/libqof/qof/gnc-date.cpp
@@ -1248,14 +1248,29 @@ gnc_dmy2timespec_neutral (int day, int month, int year)
date.tm_min = 59;
date.tm_sec = 0;
- GncDateTime gncdt(date);
- auto offset = gncdt.offset() / 3600;
- if (offset < -11)
- date.tm_hour = -offset;
- if (offset > 13)
- date.tm_hour = 23 - offset;
-
- return {gnc_timegm(&date), 0};
+ try
+ {
+ GncDateTime gncdt(date);
+ auto offset = gncdt.offset() / 3600;
+ if (offset < -11)
+ date.tm_hour = -offset;
+ if (offset > 13)
+ date.tm_hour = 23 - offset;
+
+ return {gnc_timegm(&date), 0};
+ }
+ catch(const std::logic_error& err)
+ {
+ PWARN("Date computation error from Y-M-D %d-%d-%d: %s",
+ year, month, day, err.what());
+ return {INT64_MAX, 0};
+ }
+ catch(const std::runtime_error& err)
+ {
+ PWARN("Date computation error from Y-M-D %d-%d-%d: %s",
+ year, month, day, err.what());
+ return {INT64_MAX, 0};
+ }
}
/********************************************************************\
\********************************************************************/
diff --git a/src/libqof/qof/test/test-gnc-date.c b/src/libqof/qof/test/test-gnc-date.c
index a391ea2..45af962 100644
--- a/src/libqof/qof/test/test-gnc-date.c
+++ b/src/libqof/qof/test/test-gnc-date.c
@@ -110,7 +110,7 @@ typedef struct
typedef struct
{
- TimeMap test[4];
+ TimeMap test[8];
} FixtureB;
static void
@@ -120,6 +120,10 @@ setup_begin(FixtureB *f, gconstpointer pData)
f->test[1] = (TimeMap){1918, 3, 31, INT64_C(-1633305600)};
f->test[2] = (TimeMap){1918, 4, 1, INT64_C(-1633219200)};
f->test[3] = (TimeMap){2057, 11, 20, INT64_C(2773440000)};
+ f->test[4] = (TimeMap){1257, 07, 02, INT64_C(21695385600)}; /*invalid year*/
+ f->test[5] = (TimeMap){2017, 02, 29, INT64_C(1488326400)}; /*invalid day*/
+ f->test[6] = (TimeMap){2017, 02, 33, INT64_C(1488672000)}; /*invalid day*/
+ f->test[7] = (TimeMap){2017, 13, 29, INT64_C(1517184000)}; /*invalid month*/
}
static void
@@ -129,6 +133,10 @@ setup_neutral(FixtureB *f, gconstpointer pData)
f->test[1] = (TimeMap){1918, 3, 31, INT64_C(-1633266060)};
f->test[2] = (TimeMap){1918, 4, 1, INT64_C(-1633179660)};
f->test[3] = (TimeMap){2057, 11, 20, INT64_C(2773479540)};
+ f->test[4] = (TimeMap){1257, 07, 02, INT64_MAX};
+ f->test[5] = (TimeMap){2017, 02, 29, INT64_MAX};
+ f->test[6] = (TimeMap){2017, 02, 33, INT64_MAX};
+ f->test[7] = (TimeMap){2017, 13, 29, INT64_MAX};
}
static void
@@ -138,6 +146,10 @@ setup_end(FixtureB *f, gconstpointer pData)
f->test[1] = (TimeMap){1918, 3, 31, INT64_C(-1633219201)};
f->test[2] = (TimeMap){1918, 4, 1, INT64_C(-1633132801)};
f->test[3] = (TimeMap){2057, 11, 20, INT64_C(2773526399)};
+ f->test[4] = (TimeMap){1257, 07, 02, INT64_C(21695471999)};
+ f->test[5] = (TimeMap){2017, 02, 29, INT64_C(1488412799)};
+ f->test[6] = (TimeMap){2017, 02, 33, INT64_C(1488758399)};
+ f->test[7] = (TimeMap){2017, 13, 29, INT64_C(1517270399)};
}
void test_suite_gnc_date ( void );
commit 3a794e75be8c7d9196757fc043e0a1c3a73a7db4
Author: John Ralls <jralls at ceridwen.us>
Date: Tue Jan 10 14:08:20 2017 -0800
Add note about setting GTEST cmake variables.
Because I keep forgetting them...
diff --git a/cmake/README_CMAKE.txt b/cmake/README_CMAKE.txt
index c9249e1..4ad582d 100644
--- a/cmake/README_CMAKE.txt
+++ b/cmake/README_CMAKE.txt
@@ -107,6 +107,11 @@ Then decide what cmake command line options you will need:
the top-level `CMakeLists.txt` file. For example, you can disable
SQL using these options.
+ * Google Test will work without setting options in most Linux distros, but if
+ it doesn't you may need to set GMOCK_ROOT or GTEST_ROOT to the root of the
+ respective sources. Set GTEST_DISABLE to prevent Google Test based tests from
+ running.
+
Some examples:
* Build on Linux, don't want to install, use the Makefile generator:
@@ -125,6 +130,11 @@ Some examples:
$ cmake -D CMAKE_INSTALL_PREFIX=/tmp/gnucash -D CMAKE_PREFIX_PATH=$HOME/gnucash-unstable -G Xcode ../gnucash
+ * Again, this time pointing to a gmock-1.7.0 source directory:
+
+ $ cmake -D CMAKE_INSTALL_PREFIX=/tmp/gnucash -D
+ CMAKE_PREFIX_PATH=$HOME/gnucash-unstable -D GMOCK_ROOT=$HOME/gmock-1.7.0 -D GTEST_ROOT=$HOME/gmock-1.7.0/gtest -G Xcode ../gnucash
+
=== Building
The Xcode, Ninja and Makefile generators all support parallel builds,
Summary of changes:
cmake/README_CMAKE.txt | 10 ++++++++++
src/libqof/qof/gnc-date.cpp | 31 +++++++++++++++++++++++--------
src/libqof/qof/test/test-gnc-date.c | 14 +++++++++++++-
3 files changed, 46 insertions(+), 9 deletions(-)
More information about the gnucash-changes
mailing list