diff --git a/tools/router/unmarshal_request_data.go b/tools/router/unmarshal_request_data.go index dc111836..6152fbad 100644 --- a/tools/router/unmarshal_request_data.go +++ b/tools/router/unmarshal_request_data.go @@ -325,7 +325,8 @@ func inferValue(raw string) any { // try to convert to number // // note: expects the provided raw string to match exactly with the minimal string representation of the parsed float - if raw[0] == '-' || (raw[0] >= '0' && raw[0] <= '9') && inferNumberCharsRegex.Match([]byte(raw)) { + if (raw[0] == '-' || (raw[0] >= '0' && raw[0] <= '9')) && + inferNumberCharsRegex.Match([]byte(raw)) { v, err := strconv.ParseFloat(raw, 64) if err == nil && strconv.FormatFloat(v, 'f', -1, 64) == raw { return v diff --git a/tools/router/unmarshal_request_data_test.go b/tools/router/unmarshal_request_data_test.go index 51b86e4f..047aa867 100644 --- a/tools/router/unmarshal_request_data_test.go +++ b/tools/router/unmarshal_request_data_test.go @@ -31,6 +31,7 @@ func TestUnmarshalRequestData(t *testing.T) { "000001", "-000001", "1.6E-35", + "-1.6E-35", "10e100", "1_000_000", "1.000.000", @@ -328,7 +329,7 @@ func TestUnmarshalRequestData(t *testing.T) { name: "*map[string]any", data: mapData, dst: pointer(map[string]any{}), - result: `{"bool1":true,"bool2":[true,false],"json_a":null,"json_b":123,"json_c":[1,2,3],"mixed":[true,123,"test"],"number1":1,"number2":[2,3],"number3":[2.1,-3.4],"number4":[0,-0,0.0001],"string0":"","string1":"a","string2":["b","c"],"string3":["0.0","-0.0","000.1","000001","-000001","1.6E-35","10e100","1_000_000","1.000.000"," 123 ","0b1","0xFF","1234A","Infinity","-Infinity","undefined","null"]}`, + result: `{"bool1":true,"bool2":[true,false],"json_a":null,"json_b":123,"json_c":[1,2,3],"mixed":[true,123,"test"],"number1":1,"number2":[2,3],"number3":[2.1,-3.4],"number4":[0,-0,0.0001],"string0":"","string1":"a","string2":["b","c"],"string3":["0.0","-0.0","000.1","000001","-000001","1.6E-35","-1.6E-35","10e100","1_000_000","1.000.000"," 123 ","0b1","0xFF","1234A","Infinity","-Infinity","undefined","null"]}`, }, { name: "valid pointer struct (all fields)",