From dfe029958c99fe7bb38f436cae52e256a0b396da Mon Sep 17 00:00:00 2001 From: Daisuke Maki Date: Wed, 18 Feb 2026 09:45:26 +0900 Subject: [PATCH] tweak handling --- query.go | 3 +++ query_test.go | 19 +++++++++++++++++++ source.go | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/query.go b/query.go index 3375aca..4b482f7 100644 --- a/query.go +++ b/query.go @@ -72,6 +72,9 @@ func (q *Query) RuneSlice() []rune { func (q *Query) RuneAt(where int) rune { q.mutex.Lock() defer q.mutex.Unlock() + if where < 0 || where >= len(q.query) { + return 0 + } return q.query[where] } diff --git a/query_test.go b/query_test.go index 365a4bd..692f574 100644 --- a/query_test.go +++ b/query_test.go @@ -152,6 +152,25 @@ func TestQueryRuneAtUnicode(t *testing.T) { require.Equal(t, 'う', q.RuneAt(2)) } +func TestQueryRuneAtOutOfBounds(t *testing.T) { + t.Parallel() + var q Query + q.Set("hello") + + // Out-of-bounds index returns zero rune without panicking + require.Equal(t, rune(0), q.RuneAt(5)) + require.Equal(t, rune(0), q.RuneAt(100)) + + // Negative index returns zero rune without panicking + require.Equal(t, rune(0), q.RuneAt(-1)) + require.Equal(t, rune(0), q.RuneAt(-100)) + + // Empty query: any index returns zero rune + var empty Query + require.Equal(t, rune(0), empty.RuneAt(0)) + require.Equal(t, rune(0), empty.RuneAt(-1)) +} + func TestQueryInsertAt(t *testing.T) { t.Parallel() tests := []struct { diff --git a/source.go b/source.go index c7f4151..9d29bea 100644 --- a/source.go +++ b/source.go @@ -106,7 +106,7 @@ func (s *Source) Setup(ctx context.Context, state *Peco) { } if closer, ok := s.in.(io.Closer); ok { s.inClosed = true - closer.Close() + _ = closer.Close() } }()