aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Kuehler <keur@ocf.berkeley.edu>2019-07-28 16:41:44 -0700
committerDrew DeVault <sir@cmpwn.com>2019-07-29 14:51:39 -0400
commit2804f000017c0ef6bcaf8d571627fa08784f48ac (patch)
treec031fcd1e3121f005452e89de65093ec8443f59c
parentb812257ba97020e90e7598378b54f737364a1636 (diff)
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>
-rw-r--r--lib/msgstore.go18
1 files changed, 10 insertions, 8 deletions
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
}