From 6674b3d213a56a1d945a81d86925fe65431bb6bc Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Fri, 15 Dec 2023 08:11:38 +0000 Subject: [PATCH] Fix out-of-bounds access in files shorter than the screen --- cursesclient.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/cursesclient.py b/cursesclient.py index 16f9624..83b4b54 100644 --- a/cursesclient.py +++ b/cursesclient.py @@ -764,36 +764,38 @@ class ObjectFile(File): sl_rendered = util.exactly_one(sl.render(self.cc.scr_w)) self.cc.print_at(self.cc.scr_h - 1, 0, sl_rendered) + def last_index(self): + return self.index_by_line[min(self.linepos-1, len(self.lines)-1)] def send_mode(self): if self.items_have_authors: self.mode = 'select' self.select_type = 'send' - self.select_target = self.index_by_line[self.linepos-1] + self.select_target = self.last_index() def favourite_mode(self): if self.items_are_statuses: self.mode = 'select' self.select_type = 'favourite' - self.select_target = self.index_by_line[self.linepos-1] + self.select_target = self.last_index() def boost_mode(self): if self.items_are_statuses: self.mode = 'select' self.select_type = 'boost' - self.select_target = self.index_by_line[self.linepos-1] + self.select_target = self.last_index() def thread_mode(self): if self.items_are_statuses: self.mode = 'select' self.select_type = 'thread' - self.select_target = self.index_by_line[self.linepos-1] + self.select_target = self.last_index() def info_mode(self): if self.items_are_statuses: self.mode = 'select' self.select_type = 'info' - self.select_target = self.index_by_line[self.linepos-1] + self.select_target = self.last_index() def examine_mode(self): if self.items_have_authors: self.mode = 'select' self.select_type = 'examine' - self.select_target = self.index_by_line[self.linepos-1] + self.select_target = self.last_index() def prev_select_target(self): self.select_target = max(self.minpos, self.select_target-1) def next_select_target(self): -- 2.30.2