diff options
author | Oliver Smith <osmith@sysmocom.de> | 2019-06-04 12:18:53 +0200 |
---|---|---|
committer | Oliver Smith <osmith@sysmocom.de> | 2019-06-04 12:41:54 +0200 |
commit | 63de00cfc104a32b5fb6abeeabaa631381c4cb36 (patch) | |
tree | cf9ae88960552a1e928579750a93af939191991d | |
parent | 1a1398ed54038ab0be3d1154260119836b7c2980 (diff) |
db_hlr: zero-initialize "struct tm"
The last LU time gets read from the database as string, parsed with
strptime to "struct tm", and then gets converted to time_t with mktime.
A recent behavior change in glibc's mktime implementation unconvered,
that we don't have tm.tm_isdst (daylight saving time) set properly. As
"struct tm" was not initialized, and strptime did not write to tm_isdst,
it was set to a random value. When it was not 0, db_test failed on UTC
systems with a more recent glibc (e.g. Ubuntu 19.04).
Fix this by zero-initializing "struct tm" and remove the previous
workaround that made db_test pass on UTC systems.
Related: OS#4026
Change-Id: Iebbbe42fc5cd43324206d9433ede67b39251389c
-rw-r--r-- | src/db_hlr.c | 2 | ||||
-rw-r--r-- | tests/testsuite.at | 4 |
2 files changed, 2 insertions, 4 deletions
diff --git a/src/db_hlr.c b/src/db_hlr.c index 362dcf2..694ac53 100644 --- a/src/db_hlr.c +++ b/src/db_hlr.c @@ -445,7 +445,7 @@ static int db_sel(struct db_context *dbc, sqlite3_stmt *stmt, struct hlr_subscri int rc; int ret = 0; const char *last_lu_seen_str; - struct tm tm; + struct tm tm = {0}; /* execute the statement */ rc = sqlite3_step(stmt); diff --git a/tests/testsuite.at b/tests/testsuite.at index 7d268d1..70ae7ae 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -29,12 +29,10 @@ cat $abs_srcdir/gsup_server/gsup_server_test.err > experr AT_CHECK([$abs_top_builddir/tests/gsup_server/gsup_server_test], [], [expout], [experr]) AT_CLEANUP -# TZ=CET: workaround for glibc bug in mktime() (https://osmocom.org/issues/4026): -# "Cannot convert LU timestamp '2019-05-26 03:05:03' to time_t: Value too large for defined data type" AT_SETUP([db]) AT_KEYWORDS([db]) cat $abs_srcdir/db/db_test.ok > expout cat $abs_srcdir/db/db_test.err > experr sqlite3 db_test.db < $abs_top_srcdir/sql/hlr.sql -AT_CHECK([TZ=CET $abs_top_builddir/tests/db/db_test], [], [expout], [experr]) +AT_CHECK([$abs_top_builddir/tests/db/db_test], [], [expout], [experr]) AT_CLEANUP |