From 2804f000017c0ef6bcaf8d571627fa08784f48ac Mon Sep 17 00:00:00 2001
From: Kevin Kuehler <keur@ocf.berkeley.edu>
Date: Sun, 28 Jul 2019 16:41:44 -0700
Subject: lib/msgstore: Fix Select, Next, Prev with filter

When filter is active we want to use store.results instead of
store.uids, since we are dealing with a subset of the uids. Otherwise
any methods involving len will have undefined behavior.

Signed-off-by: Kevin Kuehler <keur@ocf.berkeley.edu>
---
 lib/msgstore.go | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

(limited to 'lib')

diff --git a/lib/msgstore.go b/lib/msgstore.go
index 53faaac..48a105e 100644
--- a/lib/msgstore.go
+++ b/lib/msgstore.go
@@ -310,7 +310,7 @@ func (store *MessageStore) Uids() []uint32 {
 }
 
 func (store *MessageStore) Selected() *models.MessageInfo {
-	return store.Messages[store.uids[len(store.uids)-store.selected-1]]
+	return store.Messages[store.Uids()[len(store.Uids())-store.selected-1]]
 }
 
 func (store *MessageStore) SelectedIndex() int {
@@ -318,32 +318,34 @@ func (store *MessageStore) SelectedIndex() int {
 }
 
 func (store *MessageStore) Select(index int) {
+	uids := store.Uids()
 	store.selected = index
-	for ; store.selected < 0; store.selected = len(store.uids) + store.selected {
+	for ; store.selected < 0; store.selected = len(uids) + store.selected {
 		/* This space deliberately left blank */
 	}
-	if store.selected > len(store.uids) {
-		store.selected = len(store.uids)
+	if store.selected > len(uids) {
+		store.selected = len(uids)
 	}
 }
 
 func (store *MessageStore) nextPrev(delta int) {
-	if len(store.uids) == 0 {
+	uids := store.Uids()
+	if len(uids) == 0 {
 		return
 	}
 	store.selected += delta
 	if store.selected < 0 {
 		store.selected = 0
 	}
-	if store.selected >= len(store.uids) {
-		store.selected = len(store.uids) - 1
+	if store.selected >= len(uids) {
+		store.selected = len(uids) - 1
 	}
 	nextResultIndex := len(store.results) - store.resultIndex - 2*delta
 	if nextResultIndex < 0 || nextResultIndex >= len(store.results) {
 		return
 	}
 	nextResultUid := store.results[nextResultIndex]
-	selectedUid := store.uids[len(store.uids)-store.selected-1]
+	selectedUid := uids[len(uids)-store.selected-1]
 	if nextResultUid == selectedUid {
 		store.resultIndex += delta
 	}
-- 
cgit v1.2.3