summaryrefslogtreecommitdiffstats
path: root/testsuites
diff options
context:
space:
mode:
authorFrank K├╝hndel <frank.kuehndel@embedded-brains.de>2021-04-08 15:41:15 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-04-21 07:13:31 +0200
commit7bbbe4225c92b646faa14e5f5800ed2feba09899 (patch)
treeece4e7cd78885c29207ce0b2c50ea537af65bc86 /testsuites
parent2a24f99d113fe54920e8533ad5fb6cd1da1335c1 (diff)
downloadrtems-7bbbe4225c92b646faa14e5f5800ed2feba09899.tar.bz2
clock:_TOD_To_seconds(): Fix year 2514 overflow
This patch fixes issue #4338 by changing _TOD_Validate() to only accept years till 2105. This requires another patch to change the documentation of rtems_clock_set() and other affected API functions (indicating the end date is 2105 not 2514). I tried to support till year 2514 but it turned out that this needs changing the Timer Manager too. That in turn would mean to change _TOD_Seconds_since_epoch( void ) from 32 to 64 bit. Sebastian pointed out that a naive extension leads to trouble with 32 bit processors. He deemed a safe re-implementation too costly performance wise considering that year 2106 is far away and current binaries using RTEMS Classic API are unlikely to be in use by 2106. The constant TOD_SECONDS_AT_2100_03_01_00_00 in cpukit/rtems/src/clocktodtoseconds.c happens to be wrong by 1 hour. When setting the date 2100-Feb-28 23:59:59 and then reading the date again you will find yourself in 2100-Feb-27. Update #4338
Diffstat (limited to 'testsuites')
-rw-r--r--testsuites/sptests/sp2038/init.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/testsuites/sptests/sp2038/init.c b/testsuites/sptests/sp2038/init.c
index a3f09d4156..10850d9c4d 100644
--- a/testsuites/sptests/sp2038/init.c
+++ b/testsuites/sptests/sp2038/init.c
@@ -149,8 +149,7 @@ static const uint32_t sample_seconds [] = {
4168736895UL,
4200272895UL,
4231808895UL,
- 4263431295UL,
- 4294967295UL
+ 4263431295UL
};
static const rtems_time_of_day nearly_problem_2038 = {
@@ -171,8 +170,8 @@ static const rtems_time_of_day problem_2038 = {
.second = 8
};
-static const rtems_time_of_day nearly_problem_2106 = {
- .year = 2106,
+static const rtems_time_of_day tod_to_seconds_base = {
+ .year = 0,
.month = 2,
.day = 7,
.hour = 6,
@@ -180,13 +179,22 @@ static const rtems_time_of_day nearly_problem_2106 = {
.second = 15
};
+static const rtems_time_of_day nearly_problem_2106 = {
+ .year = 2105,
+ .month = 12,
+ .day = 31,
+ .hour = 23,
+ .minute = 59,
+ .second = 59
+};
+
static const rtems_time_of_day problem_2106 = {
.year = 2106,
- .month = 2,
- .day = 7,
- .hour = 6,
- .minute = 28,
- .second = 16
+ .month = 1,
+ .day = 1,
+ .hour = 0,
+ .minute = 0,
+ .second = 0
};
static const rtems_time_of_day problem_2100 = {
@@ -214,7 +222,7 @@ static void test_tod_to_seconds(void)
size_t n = sizeof(sample_seconds) / sizeof(sample_seconds [0]);
for (i = 0; i < n; ++i) {
- rtems_time_of_day tod = nearly_problem_2106;
+ rtems_time_of_day tod = tod_to_seconds_base;
uint32_t seconds = 0;
rtems_interval seconds_as_interval = 0;