From 4c9e8626b2ef05d456c087fc93b55a9928e3c2ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=90=8D?= Date: Mon, 4 May 2026 10:15:13 +0800 Subject: [PATCH] fix: handle negative truncate lengths --- internal/util/strings.go | 6 ++++++ internal/util/strings_test.go | 3 +++ 2 files changed, 9 insertions(+) diff --git a/internal/util/strings.go b/internal/util/strings.go index 0850a607a..ba34e3535 100644 --- a/internal/util/strings.go +++ b/internal/util/strings.go @@ -5,6 +5,9 @@ package util // TruncateStr truncates s to at most n runes, safe for multi-byte (e.g. CJK) characters. func TruncateStr(s string, n int) string { + if n <= 0 { + return "" + } r := []rune(s) if len(r) <= n { return s @@ -14,6 +17,9 @@ func TruncateStr(s string, n int) string { // TruncateStrWithEllipsis truncates s to at most n runes (including "..." suffix). func TruncateStrWithEllipsis(s string, n int) string { + if n <= 0 { + return "" + } r := []rune(s) if len(r) <= n { return s diff --git a/internal/util/strings_test.go b/internal/util/strings_test.go index 766a5d395..ebbe3a1bd 100644 --- a/internal/util/strings_test.go +++ b/internal/util/strings_test.go @@ -17,6 +17,7 @@ func TestTruncateStr(t *testing.T) { {"truncate", "hello world", 5, "hello"}, {"empty", "", 5, ""}, {"zero limit", "hello", 0, ""}, + {"negative limit", "hello", -1, ""}, {"CJK characters", "你好世界测试", 4, "你好世界"}, } for _, tt := range tests { @@ -41,6 +42,8 @@ func TestTruncateStrWithEllipsis(t *testing.T) { {"limit less than 3", "hello", 2, "he"}, {"limit equals 3", "hello world", 3, "..."}, {"empty", "", 5, ""}, + {"zero limit", "hello", 0, ""}, + {"negative limit", "hello", -1, ""}, {"CJK with ellipsis", "你好世界测试", 5, "你好..."}, } for _, tt := range tests {