From 4cd300f2c408907b4a576b55fc15479afbd5d81f Mon Sep 17 00:00:00 2001 From: Nicholas Johnson Date: Thu, 11 Aug 2022 00:00:00 +0000 Subject: Check that note files open before reading them This fixes the scenario where a note file referenced by a todo, event, or appointment is modified from outside the program in such a way that it cannot be opened by the program, resulting in a segmentation fault. The least surprising way to proceed is to ignore the note. Signed-off-by: Nicholas Johnson Signed-off-by: Lukas Fleischer --- src/day.c | 8 ++++++++ src/ui-todo.c | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/src/day.c b/src/day.c index a86a91d..13149ea 100644 --- a/src/day.c +++ b/src/day.c @@ -634,6 +634,10 @@ void day_popup_item(struct day_item *day) asprintf(¬epath, "%s%s", path_notes, day_item_get_note(day)); fp = fopen(notepath, "r"); + if (fp == NULL) { + item_in_popup(NULL, NULL, day_item_get_mesg(day), _("Event:")); + return; + } note_read_contents(note, note_size, fp); fclose(fp); mem_free(notepath); @@ -661,6 +665,10 @@ void day_popup_item(struct day_item *day) asprintf(¬epath, "%s%s", path_notes, day_item_get_note(day)); fp = fopen(notepath, "r"); + if (fp == NULL) { + item_in_popup(a_st, a_end, day_item_get_mesg(day), _("Appointment:")); + return; + } note_read_contents(note, note_size, fp); fclose(fp); mem_free(notepath); diff --git a/src/ui-todo.c b/src/ui-todo.c index b65b8d3..6fdd08f 100644 --- a/src/ui-todo.c +++ b/src/ui-todo.c @@ -327,6 +327,11 @@ void ui_todo_popup_item(void) asprintf(¬epath, "%s%s", path_notes, item->note); fp = fopen(notepath, "r"); + if (fp == NULL) { + item_in_popup(NULL, NULL, item->mesg, _("TODO:")); + return; + } + note_read_contents(note, note_size, fp); fclose(fp); mem_free(notepath); -- cgit v1.2.3-70-g09d2