From 0e79ba90839ca8e105b8e3b9cdee6dcc9b84d82a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 9 Oct 2025 09:09:27 +0000 Subject: [PATCH] Add bounds checking and defensive programming improvements Co-authored-by: foglar <82380203+foglar@users.noreply.github.com> --- internal/tui/chat.go | 4 ++-- internal/tui/sidebar.go | 10 +++++++++- internal/tui/tui.go | 5 +++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/internal/tui/chat.go b/internal/tui/chat.go index 8eabec8..1aebcdb 100644 --- a/internal/tui/chat.go +++ b/internal/tui/chat.go @@ -56,7 +56,7 @@ func updateChatView(v *gocui.View) { h = 0 } - if len(users) == 0 { + if len(users) == 0 || selectedUserIdx >= len(users) { continue } @@ -72,7 +72,7 @@ func updateChatView(v *gocui.View) { } func sendMessage(g *gocui.Gui, v *gocui.View) error { - if len(users) == 0 { + if len(users) == 0 || selectedUserIdx >= len(users) { return nil } diff --git a/internal/tui/sidebar.go b/internal/tui/sidebar.go index 36328cb..94cb58a 100644 --- a/internal/tui/sidebar.go +++ b/internal/tui/sidebar.go @@ -33,14 +33,22 @@ func updateContactsView(g *gocui.Gui) error { return errors.New("no contacts in the list, find some friends") } + // Ensure selectedUserIdx is within bounds + if selectedUserIdx < 0 || selectedUserIdx >= len(users) { + selectedUserIdx = 0 + } + LoadMessages(users[selectedUserIdx]) _, maxY := g.Size() h := min(len(users), (maxY/2)-1) + if h <= 0 { + h = 1 + } startI := max(0, min(selectedUserIdx-(h/2), len(users)-h)) fmt.Fprint(v, "\n\n") - for i := startI; i < startI+h; i++ { + for i := startI; i < startI+h && i < len(users); i++ { u := users[i] fmt.Fprint(v, "\t\t\t\t") diff --git a/internal/tui/tui.go b/internal/tui/tui.go index 4edf94c..388c220 100644 --- a/internal/tui/tui.go +++ b/internal/tui/tui.go @@ -14,6 +14,11 @@ var selectedUserIdx int = 0 func Run() { LoadContacts(defaultServerPath) + // Load initial messages if there are any contacts + if len(users) > 0 && selectedUserIdx < len(users) { + LoadMessages(users[selectedUserIdx]) + } + g, err := gocui.NewGui(gocui.OutputNormal) if err != nil { log.Panicln(err)