瀏覽代碼

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 年之前
父節點
當前提交
894ccd18ff
共有 1 個文件被更改,包括 10 次插入1 次删除
  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{}) {
 	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() {