Skip to content

Commit ca0971d

Browse files
palytoxinAbdulrhmnGhanem
authored andcommitted
fix truncate utf8 string (go-gitea#15828)
* fix truncate utf8 string. * revoke truncated user info.
1 parent 6ee2688 commit ca0971d

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

modules/base/tool.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"strings"
2222
"time"
2323
"unicode"
24+
"unicode/utf8"
2425

2526
"code.gitea.io/gitea/modules/git"
2627
"code.gitea.io/gitea/modules/log"
@@ -213,19 +214,19 @@ func EllipsisString(str string, length int) string {
213214
if length <= 3 {
214215
return "..."
215216
}
216-
if len(str) <= length {
217+
if utf8.RuneCountInString(str) <= length {
217218
return str
218219
}
219-
return str[:length-3] + "..."
220+
return string([]rune(str)[:length-3]) + "..."
220221
}
221222

222223
// TruncateString returns a truncated string with given limit,
223224
// it returns input string if length is not reached limit.
224225
func TruncateString(str string, limit int) string {
225-
if len(str) < limit {
226+
if utf8.RuneCountInString(str) < limit {
226227
return str
227228
}
228-
return str[:limit]
229+
return string([]rune(str)[:limit])
229230
}
230231

231232
// StringsToInt64s converts a slice of string to a slice of int64.

modules/base/tool_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,10 @@ func TestEllipsisString(t *testing.T) {
170170
assert.Equal(t, "fo...", EllipsisString("foobar", 5))
171171
assert.Equal(t, "foobar", EllipsisString("foobar", 6))
172172
assert.Equal(t, "foobar", EllipsisString("foobar", 10))
173+
assert.Equal(t, "测...", EllipsisString("测试文本一二三四", 4))
174+
assert.Equal(t, "测试...", EllipsisString("测试文本一二三四", 5))
175+
assert.Equal(t, "测试文...", EllipsisString("测试文本一二三四", 6))
176+
assert.Equal(t, "测试文本一二三四", EllipsisString("测试文本一二三四", 10))
173177
}
174178

175179
func TestTruncateString(t *testing.T) {
@@ -181,6 +185,10 @@ func TestTruncateString(t *testing.T) {
181185
assert.Equal(t, "fooba", TruncateString("foobar", 5))
182186
assert.Equal(t, "foobar", TruncateString("foobar", 6))
183187
assert.Equal(t, "foobar", TruncateString("foobar", 7))
188+
assert.Equal(t, "测试文本", TruncateString("测试文本一二三四", 4))
189+
assert.Equal(t, "测试文本一", TruncateString("测试文本一二三四", 5))
190+
assert.Equal(t, "测试文本一二", TruncateString("测试文本一二三四", 6))
191+
assert.Equal(t, "测试文本一二三", TruncateString("测试文本一二三四", 7))
184192
}
185193

186194
func TestStringsToInt64s(t *testing.T) {

0 commit comments

Comments
 (0)