Browse Source

etcdhttp: check error returned by ParseForm

Yicheng Qin 11 years ago
parent
commit
6d0658c8ca
2 changed files with 16 additions and 1 deletions
  1. 4 1
      etcdserver/etcdhttp/http.go
  2. 12 0
      etcdserver/etcdhttp/http_test.go

+ 4 - 1
etcdserver/etcdhttp/http.go

@@ -135,7 +135,10 @@ func (h serverHandler) serveAdminMembers(w http.ResponseWriter, r *http.Request)
 
 
 	switch r.Method {
 	switch r.Method {
 	case "PUT":
 	case "PUT":
-		r.ParseForm()
+		if err := r.ParseForm(); err != nil {
+			http.Error(w, err.Error(), http.StatusBadRequest)
+			return
+		}
 		peerURLs := r.PostForm["PeerURLs"]
 		peerURLs := r.PostForm["PeerURLs"]
 		log.Printf("etcdhttp: add node %x with peer urls %v", id, peerURLs)
 		log.Printf("etcdhttp: add node %x with peer urls %v", id, peerURLs)
 		m := etcdserver.Member{
 		m := etcdserver.Member{

+ 12 - 0
etcdserver/etcdhttp/http_test.go

@@ -5,6 +5,7 @@ import (
 	"encoding/json"
 	"encoding/json"
 	"errors"
 	"errors"
 	"io"
 	"io"
+	"io/ioutil"
 	"net/http"
 	"net/http"
 	"net/http/httptest"
 	"net/http/httptest"
 	"net/url"
 	"net/url"
@@ -1277,11 +1278,22 @@ func TestServeAdminMembersFail(t *testing.T) {
 
 
 			http.StatusBadRequest,
 			http.StatusBadRequest,
 		},
 		},
+		{
+			// parse body error
+			&http.Request{
+				URL:    mustNewURL(t, path.Join(adminMembersPrefix, "1")),
+				Method: "PUT",
+			},
+			&resServer{},
+
+			http.StatusBadRequest,
+		},
 		{
 		{
 			// etcdserver.AddMember error
 			// etcdserver.AddMember error
 			&http.Request{
 			&http.Request{
 				URL:    mustNewURL(t, path.Join(adminMembersPrefix, "1")),
 				URL:    mustNewURL(t, path.Join(adminMembersPrefix, "1")),
 				Method: "PUT",
 				Method: "PUT",
+				Body:   ioutil.NopCloser(strings.NewReader("")),
 			},
 			},
 			&errServer{
 			&errServer{
 				errors.New("blah"),
 				errors.New("blah"),