chiark / gitweb /
Fix out-of-bounds access in files shorter than the screen
authorSimon Tatham <anakin@pobox.com>
Fri, 15 Dec 2023 08:11:38 +0000 (08:11 +0000)
committerSimon Tatham <anakin@pobox.com>
Fri, 15 Dec 2023 08:11:38 +0000 (08:11 +0000)
cursesclient.py

index 16f962401ea71a570fab6da676e67a63c6e576ba..83b4b54baea43ae6c68d0ff5cc20b9acd589608d 100644 (file)
@@ -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):