From a174aa61fd166900c71bb89ba430fef10e1a93f3 Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Sun, 14 Jan 2018 09:56:31 +0000 Subject: [PATCH] Proper error handling in EncodeJSONResponse --- serverutil/json.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/serverutil/json.go b/serverutil/json.go index b307932..746ed20 100644 --- a/serverutil/json.go +++ b/serverutil/json.go @@ -2,6 +2,7 @@ package serverutil import ( "encoding/json" + "log" "net/http" ) @@ -28,10 +29,19 @@ func DecodeJSONRequest(w http.ResponseWriter, r *http.Request, obj interface{}) // EncodeJSONResponse writes an application/json response to w. func EncodeJSONResponse(w http.ResponseWriter, obj interface{}) { + data, err := json.Marshal(obj) + if err != nil { + log.Printf("JSON serialization error: %v", err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "application/json") w.Header().Set("Pragma", "no-cache") w.Header().Set("Cache-Control", "no-store") w.Header().Set("Expires", "-1") w.Header().Set("X-Content-Type-Options", "nosniff") - _ = json.NewEncoder(w).Encode(obj) + if _, err = w.Write(data); err != nil { + log.Printf("error writing response: %v", err) + } } -- GitLab