From 8783defb428e6054bd631adb3cc692c5ad82e5ed Mon Sep 17 00:00:00 2001 From: Michael Geers Date: Mon, 2 May 2022 07:54:26 +0200 Subject: [PATCH] Fix websocket json; represent NaN as null (#3298) --- server/socket.go | 7 ++++++- server/socket_test.go | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/server/socket.go b/server/socket.go index db2c926cb..89077a516 100644 --- a/server/socket.go +++ b/server/socket.go @@ -3,6 +3,7 @@ package server import ( "encoding/json" "fmt" + "math" "net/http" "strings" "time" @@ -100,7 +101,11 @@ func encode(v interface{}) (string, error) { // must be before stringer to convert to seconds instead of string s = fmt.Sprintf("%d", int64(val.Seconds())) case float64: - s = fmt.Sprintf("%.5g", val) + if math.IsNaN(val) { + s = "null" + } else { + s = fmt.Sprintf("%.5g", val) + } default: if b, err := json.Marshal(v); err == nil { s = string(b) diff --git a/server/socket_test.go b/server/socket_test.go index 469c9f790..f6abef3f2 100644 --- a/server/socket_test.go +++ b/server/socket_test.go @@ -1,6 +1,7 @@ package server import ( + "math" "reflect" "testing" "time" @@ -11,6 +12,7 @@ func TestEncode(t *testing.T) { in, out interface{} }{ {int64(1), "1"}, + {math.NaN(), "null"}, {float64(1.23456), "1.2346"}, {"1.2345", "\"1.2345\""}, {time.Hour, "3600"},