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