From 74a48d34620f5a9ee3001a2062b5eaa598b056af Mon Sep 17 00:00:00 2001 From: 0xJacky Date: Sat, 23 Apr 2022 09:51:19 +0800 Subject: [PATCH] Fix validator's translator init issue This issue may cause an unrecoverable panic when concurrent requests to the server with the wrong parameters. --- server/api/api.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/server/api/api.go b/server/api/api.go index 930c84db..c178405e 100644 --- a/server/api/api.go +++ b/server/api/api.go @@ -24,17 +24,22 @@ type ValidError struct { Message string } +var trans ut.Translator + +func init() { + uni := ut.New(zh.New()) + trans, _ = uni.GetTranslator("zh") + v, ok := binding.Validator.Engine().(*val.Validate) + if ok { + _ = zhTranslations.RegisterDefaultTranslations(v, trans) + } +} + func BindAndValid(c *gin.Context, target interface{}) bool { errs := make(map[string]string) err := c.ShouldBindJSON(target) if err != nil { log.Println("raw err", err) - uni := ut.New(zh.New()) - trans, _ := uni.GetTranslator("zh") - v, ok := binding.Validator.Engine().(*val.Validate) - if ok { - _ = zhTranslations.RegisterDefaultTranslations(v, trans) - } verrs, ok := err.(val.ValidationErrors)