aboutsummaryrefslogtreecommitdiffstats
path: root/src/args.c
diff options
context:
space:
mode:
authorLukas Fleischer <calcurse@cryptocrack.de>2012-11-22 22:23:58 +0100
committerLukas Fleischer <calcurse@cryptocrack.de>2012-11-22 22:58:04 +0100
commite269f09438ad1bfaef044c5781615cba45ab7690 (patch)
treec68bd062390f59525ae5cf061c131f52a513d1b7 /src/args.c
parent6b6067a53bd6e78215f4c39cc0d9fa2258b6e095 (diff)
downloadcalcurse-e269f09438ad1bfaef044c5781615cba45ab7690.tar.gz
calcurse-e269f09438ad1bfaef044c5781615cba45ab7690.zip
Replace localtime() with localtime_r()
Since the result of localtime() is stored in a statically allocated structure, data was overwritten when a context switch occurred during (or shortly after) the execution of localtime(), potentially resulting in critical data corruption. BUG#7 and BUG#8 are likely related. This patch converts all usages of localtime() with localtime_r(), which is thread-safe. Reported-by: Baptiste Jonglez <baptiste@jonglez.org> Reported-by: Erik Saule <esaule@bmi.osu.edu> Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
Diffstat (limited to 'src/args.c')
-rw-r--r--src/args.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/args.c b/src/args.c
index c87a970..01f24e9 100644
--- a/src/args.c
+++ b/src/args.c
@@ -271,11 +271,11 @@ static void arg_print_date(long date)
{
char date_str[BUFSIZ];
time_t t;
- struct tm *lt;
+ struct tm lt;
t = date;
- lt = localtime(&t);
- strftime(date_str, BUFSIZ, conf.output_datefmt, lt);
+ localtime_r(&t, &lt);
+ strftime(date_str, BUFSIZ, conf.output_datefmt, &lt);
fputs(date_str, stdout);
fputs(":\n", stdout);
}
@@ -469,7 +469,7 @@ date_arg(const char *ddate, int add_line, const char *fmt_apt,
* to format the output correctly.
*/
timer = time(NULL);
- t = *localtime(&timer);
+ localtime_r(&timer, &t);
display_app(&t, numdays, add_line, fmt_apt, fmt_rapt, fmt_ev, fmt_rev,
regex);
} else { /* a date was entered */
@@ -515,7 +515,7 @@ date_arg_extended(const char *startday, const char *range, int add_line,
numdays = atoi(range);
}
timer = time(NULL);
- t = *localtime(&timer);
+ localtime_r(&timer, &t);
if (startday != NULL) {
if (parse_date(startday, conf.input_datefmt, (int *)&t.tm_year,
(int *)&t.tm_mon, (int *)&t.tm_mday, NULL)) {