jonas / tig

Text-mode interface for git
https://jonas.github.io/tig/
GNU General Public License v2.0
12.41k stars 607 forks source link

update_view_title: Fix NULL dereference at startup #1293

Closed abhinav closed 11 months ago

abhinav commented 1 year ago

update_view_title can be called with a struct view where line is NULL, and lines is 0.

Along this call stack:

0  update_view_title (view=0x3fdb88 <main_view>) at [...]/tig/src/view.c:690
1  0x0000000000338018 in report_clear () at [...]/tig/src/display.c:565
2  0x00000000003cfe5b in load_view (view=0x3fdb88 <main_view>, prev=0x3fdb88 <main_view>, flags=OPEN_
   at [...]/tig/src/view.c:857
3  0x00000000003d0bc0 in open_view (prev=0x0, view=0x3fdb88 <main_view>, flags=OPEN_DEFAULT)
   at [...]/tig/src/view.c:894
4  0x00000000003b2932 in open_main_view (prev=0x0, flags=OPEN_DEFAULT) at include/tig/main.h:57
5  0x00000000003b0cca in view_driver (view=0x0, request=REQ_VIEW_MAIN) at [...]/tig/src/tig.c:179
6  0x00000000003af96a in main (argc=1, argv=0x7fffffffddb8) at [...]/tig/src/tig.c:864

Specifically, load_view calls report_clear when view->lines == 0, which calls update_view_title, which attempts &view->line[...] on a null line.

It's not clear why this doesn't explode today. I caught it when I ran tig compiled with Zig in debug mode and it failed with an illegal instruction on the line:

struct line *line = &view->line[view->pos.lineno];

Adding a check for NULL or lines == 0 resolves the issue.

koutcher commented 11 months ago

Thanks