From 669c76c0fdd006c81109ce22565a5921983d1c16 Mon Sep 17 00:00:00 2001 From: Giteabot Date: Mon, 3 Apr 2023 19:26:14 -0400 Subject: [PATCH] Fix `cases.Title` crash for concurrency (#23885) (#23903) Backport #23885 by @wxiaoguang Regression of #19676 and #21814 Fix #23872 `cases.Title` is not thread-safe, it has internal state, so it can't be used as a global shared variable. Co-authored-by: wxiaoguang --- modules/util/util.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/modules/util/util.go b/modules/util/util.go index 9d3a8dcfac..b2800d6a0c 100644 --- a/modules/util/util.go +++ b/modules/util/util.go @@ -185,19 +185,16 @@ func ToUpperASCII(s string) string { return string(b) } -var ( - titleCaser = cases.Title(language.English) - titleCaserNoLower = cases.Title(language.English, cases.NoLower) -) - // ToTitleCase returns s with all english words capitalized func ToTitleCase(s string) string { - return titleCaser.String(s) + // `cases.Title` is not thread-safe, do not use global shared variable for it + return cases.Title(language.English).String(s) } -// ToTitleCaseNoLower returns s with all english words capitalized without lowercasing +// ToTitleCaseNoLower returns s with all english words capitalized without lower-casing func ToTitleCaseNoLower(s string) string { - return titleCaserNoLower.String(s) + // `cases.Title` is not thread-safe, do not use global shared variable for it + return cases.Title(language.English, cases.NoLower).String(s) } var (