diff --git a/tools/goctl/api/swagger/annotation.go b/tools/goctl/api/swagger/annotation.go index ad85f18b2..c019ba163 100644 --- a/tools/goctl/api/swagger/annotation.go +++ b/tools/goctl/api/swagger/annotation.go @@ -16,8 +16,10 @@ func getBoolFromKVOrDefault(properties map[string]string, key string, def bool) if len(val) == 0 { return def } - str := util.Unquote(val[0]) - if len(str) == 0 { + //I think this function and those below should handle error, but they didn't. + //Since a default value (def) is provided, any parsing errors will result in the default being returned. + str, err := strconv.Unquote(val[0]) + if err != nil || len(str) == 0 { return def } res, _ := strconv.ParseBool(str) @@ -33,8 +35,8 @@ func getStringFromKVOrDefault(properties map[string]string, key string, def stri if len(val) == 0 { return def } - str := util.Unquote(val[0]) - if len(str) == 0 { + str, err := strconv.Unquote(val[0]) + if err != nil || len(str) == 0 { return def } return str @@ -50,8 +52,8 @@ func getListFromInfoOrDefault(properties map[string]string, key string, def []st return def } - str := util.Unquote(val[0]) - if len(str) == 0 { + str, err := strconv.Unquote(val[0]) + if err != nil || len(str) == 0 { return def } resp := util.FieldsAndTrimSpace(str, commaRune) @@ -66,8 +68,8 @@ func getFirstUsableString(def ...string) string { return "" } for _, val := range def { - str := util.Unquote(val) - if len(str) != 0 { + str, err := strconv.Unquote(val) + if err == nil && len(str) != 0 { return str } } diff --git a/tools/goctl/util/string.go b/tools/goctl/util/string.go index 7bcaf2ed0..707f2c75c 100644 --- a/tools/goctl/util/string.go +++ b/tools/goctl/util/string.go @@ -1,6 +1,8 @@ package util import ( + "slices" + "strconv" "strings" "github.com/zeromicro/go-zero/tools/goctl/util/console" @@ -54,14 +56,9 @@ func Untitle(s string) string { } // Index returns the index where the item equal,it will return -1 if mismatched +// Deprecated: use slices.Index instead func Index(slice []string, item string) int { - for i := range slice { - if slice[i] == item { - return i - } - } - - return -1 + return slices.Index(slice, item) } // SafeString converts the input string into a safe naming style in golang @@ -134,21 +131,13 @@ func FieldsAndTrimSpace(s string, f func(r rune) bool) []string { return resp } +//Deprecated: This function implementation is incomplete and does not properly handle exceptional input cases. +//We strongly recommend using the standard library's strconv.Unquote function instead, +//which provides robust error handling and comprehensive support for various input formats. func Unquote(s string) string { - if len(s) == 0 { - return s + ns, err := strconv.Unquote(s) + if err != nil { + return "" } - left := s[0] - - if left == '`' || left == '"' { - s = s[1:len(s)] - } - if len(s) == 0 { - return s - } - right := s[len(s)-1] - if right == '`' || right == '"' { - s = s[0 : len(s)-1] - } - return s + return ns }