Forráskód Böngészése

Merge pull request #2855 from calmh/marshalfail

cmd/syncthing: Return 500 with an error object instead of empty 200 on marshalling error in REST response
Audrius Butkevicius 9 éve
szülő
commit
894ccd18ff
1 módosított fájl, 10 hozzáadás és 1 törlés
  1. 10 1
      cmd/syncthing/gui.go

+ 10 - 1
cmd/syncthing/gui.go

@@ -163,7 +163,16 @@ func (s *apiService) getListener(guiCfg config.GUIConfiguration) (net.Listener,
 
 
 func sendJSON(w http.ResponseWriter, jsonObject interface{}) {
 func sendJSON(w http.ResponseWriter, jsonObject interface{}) {
 	w.Header().Set("Content-Type", "application/json; charset=utf-8")
 	w.Header().Set("Content-Type", "application/json; charset=utf-8")
-	json.NewEncoder(w).Encode(jsonObject)
+	// Marshalling might fail, in which case we should return a 500 with the
+	// actual error.
+	bs, err := json.Marshal(jsonObject)
+	if err != nil {
+		// This Marshal() can't fail though.
+		bs, _ = json.Marshal(map[string]string{"error": err.Error()})
+		http.Error(w, string(bs), http.StatusInternalServerError)
+		return
+	}
+	w.Write(bs)
 }
 }
 
 
 func (s *apiService) Serve() {
 func (s *apiService) Serve() {