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