summaryrefslogtreecommitdiff
path: root/src/notify.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/notify.c
parent6b6067a53bd6e78215f4c39cc0d9fa2258b6e095 (diff)
downloadcalcurse-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/notify.c')
-rw-r--r--src/notify.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/notify.c b/src/notify.c
index a057c2f..10bc0f7 100644
--- a/src/notify.c
+++ b/src/notify.c
@@ -310,18 +310,18 @@ static void *notify_main_thread(void *arg)
const unsigned check_app = MININSEC;
int elapse = 0;
int got_app;
- struct tm *ntime;
+ struct tm ntime;
time_t ntimer;
elapse = 0;
for (;;) {
ntimer = time(NULL);
- ntime = localtime(&ntimer);
+ localtime_r(&ntimer, &ntime);
pthread_mutex_lock(&notify.mutex);
pthread_mutex_lock(&nbar.mutex);
- strftime(notify.time, NOTIFY_FIELD_LENGTH, nbar.timefmt, ntime);
- strftime(notify.date, NOTIFY_FIELD_LENGTH, nbar.datefmt, ntime);
+ strftime(notify.time, NOTIFY_FIELD_LENGTH, nbar.timefmt, &ntime);
+ strftime(notify.date, NOTIFY_FIELD_LENGTH, nbar.datefmt, &ntime);
pthread_mutex_unlock(&nbar.mutex);
pthread_mutex_unlock(&notify.mutex);
notify_update_bar();