Browse Source

api/server: Add missing json check

Signed-off-by: Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
Ma Shimiao 10 năm trước cách đây
mục cha
commit
801a7fed19

+ 3 - 0
api/server/server.go

@@ -1349,6 +1349,9 @@ func (s *Server) postContainerExecCreate(version version.Version, w http.Respons
 	if err := parseForm(r); err != nil {
 	if err := parseForm(r); err != nil {
 		return err
 		return err
 	}
 	}
+	if err := checkForJson(r); err != nil {
+		return err
+	}
 	name := vars["name"]
 	name := vars["name"]
 
 
 	execConfig := &runconfig.ExecConfig{}
 	execConfig := &runconfig.ExecConfig{}

+ 22 - 0
integration-cli/docker_api_exec_test.go

@@ -4,6 +4,7 @@ package main
 
 
 import (
 import (
 	"bytes"
 	"bytes"
+	"encoding/json"
 	"fmt"
 	"fmt"
 	"net/http"
 	"net/http"
 	"os/exec"
 	"os/exec"
@@ -27,3 +28,24 @@ func (s *DockerSuite) TestExecApiCreateNoCmd(c *check.C) {
 		c.Fatalf("Expected message when creating exec command with no Cmd specified")
 		c.Fatalf("Expected message when creating exec command with no Cmd specified")
 	}
 	}
 }
 }
+
+func (s *DockerSuite) TestExecApiCreateNoValidContentType(c *check.C) {
+	name := "exec_test"
+	dockerCmd(c, "run", "-d", "-t", "--name", name, "busybox", "/bin/sh")
+
+	jsonData := bytes.NewBuffer(nil)
+	if err := json.NewEncoder(jsonData).Encode(map[string]interface{}{"Cmd": nil}); err != nil {
+		c.Fatalf("Can not encode data to json %s", err)
+	}
+
+	res, body, err := sockRequestRaw("POST", fmt.Sprintf("/containers/%s/exec", name), jsonData, "text/plain")
+	c.Assert(err, check.IsNil)
+	c.Assert(res.StatusCode, check.Equals, http.StatusInternalServerError)
+
+	b, err := readBody(body)
+	c.Assert(err, check.IsNil)
+
+	if !bytes.Contains(b, []byte("Content-Type specified")) {
+		c.Fatalf("Expected message when creating exec command with invalid Content-Type specified")
+	}
+}