From efca9b18a842e7e7b58cbca879a6d7ed775f7fcf Mon Sep 17 00:00:00 2001 From: Jack Date: Wed, 12 Aug 2020 20:53:47 +0800 Subject: [PATCH] improve content type checks for package gjson --- encoding/gjson/gjson_api_new_load.go | 8 ++++--- encoding/gjson/gjson_z_unit_internal_test.go | 25 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/encoding/gjson/gjson_api_new_load.go b/encoding/gjson/gjson_api_new_load.go index d4d8ba78b..3b57b4208 100644 --- a/encoding/gjson/gjson_api_new_load.go +++ b/encoding/gjson/gjson_api_new_load.go @@ -208,7 +208,7 @@ func LoadContentType(dataType string, data interface{}, safe ...bool) (*Json, er } // checkDataType automatically checks and returns the data type for . -// Note that it uses regular expression for loose checking, you can use LoadXXX +// Note that it uses regular expression for loose checking, you can use LoadXXX/LoadContentType // functions to load the content for certain content type. func checkDataType(content []byte) string { if json.Valid(content) { @@ -218,10 +218,12 @@ func checkDataType(content []byte) string { } else if (gregex.IsMatch(`^[\n\r]*[\w\-\s\t]+\s*:\s*".+"`, content) || gregex.IsMatch(`^[\n\r]*[\w\-\s\t]+\s*:\s*\w+`, content)) || (gregex.IsMatch(`[\n\r]+[\w\-\s\t]+\s*:\s*".+"`, content) || gregex.IsMatch(`[\n\r]+[\w\-\s\t]+\s*:\s*\w+`, content)) { return "yml" - } else if !gregex.IsMatch(`^[\s\t\n\r]*;.+`, content) && !gregex.IsMatch(`[\s\t\n\r]+;.+`, content) && + } else if !gregex.IsMatch(`^[\s\t\n\r]*;.+`, content) && + !gregex.IsMatch(`[\s\t\n\r]+;.+`, content) && + !gregex.IsMatch(`[\n\r]+[\s\t\w\-]+\.[\s\t\w\-]+\s*=\s*.+`, content) && (gregex.IsMatch(`[\n\r]*[\s\t\w\-\."]+\s*=\s*".+"`, content) || gregex.IsMatch(`[\n\r]*[\s\t\w\-\."]+\s*=\s*\w+`, content)) { return "toml" - } else if gregex.IsMatch(`\[[\w]+\]`, content) && !gregex.IsMatch(`^[\s\t\n\r]*#.+`, content) && !gregex.IsMatch(`[\s\t\n\r]+#.+`, content) && + } else if gregex.IsMatch(`\[[\w\.]+\]`, content) && (gregex.IsMatch(`[\n\r]*[\s\t\w\-\."]+\s*=\s*".+"`, content) || gregex.IsMatch(`[\n\r]*[\s\t\w\-\."]+\s*=\s*\w+`, content)) { // Must contain "[xxx]" section. return "ini" diff --git a/encoding/gjson/gjson_z_unit_internal_test.go b/encoding/gjson/gjson_z_unit_internal_test.go index ef30ef2d8..82f8f2acf 100644 --- a/encoding/gjson/gjson_z_unit_internal_test.go +++ b/encoding/gjson/gjson_z_unit_internal_test.go @@ -87,4 +87,29 @@ dd = 11 //fmt.Println(gregex.MatchString(`[\n\r]+[\w\-\s\t]+\s*:\s*\w+`, string(data))) t.Assert(checkDataType(data), "toml") }) + + gtest.C(t, func(t *gtest.T) { + data := []byte(` +[default] +db.engine = mysql +db.max.idle.conns = 5 +db.max.open.conns = 100 +allow_ips = +api.key = +api.secret = +enable_tls = false +concurrency.queue = 500 +auth_secret = 63358e6f3daf0e5775ec3fb4d2516b01d41530bf30960aa76972f6ce7e08552f +ca_file = +cert_file = +key_file = +host_port = 8088 +log_path = /Users/zhaosuji/go/src/git.medlinker.com/foundations/gocron/log +#k8s-api地址(只提供内网访问) +k8s-inner-api = http://127.0.0.1:8081/kube/add +conf_dir = ./config +app_conf = ./config/app.ini +`) + t.Assert(checkDataType(data), "ini") + }) }