Pārlūkot izejas kodu

Merge pull request #22213 from yongtang/22210-docker-http-panics

Docker http panics caused by container deletion with empty names.
Michael Crosby 9 gadi atpakaļ
vecāks
revīzija
6f67c13d20
2 mainītis faili ar 15 papildinājumiem un 0 dzēšanām
  1. 7 0
      daemon/daemon.go
  2. 8 0
      integration-cli/docker_api_containers_test.go

+ 7 - 0
daemon/daemon.go

@@ -137,6 +137,10 @@ type Daemon struct {
 //    unique enough to only return a single container object
 //  If none of these searches succeed, an error is returned
 func (daemon *Daemon) GetContainer(prefixOrName string) (*container.Container, error) {
+	if len(prefixOrName) == 0 {
+		return nil, errors.NewBadRequestError(fmt.Errorf("No container name or ID supplied"))
+	}
+
 	if containerByID := daemon.containers.Get(prefixOrName); containerByID != nil {
 		// prefix is an exact match to a full container ID
 		return containerByID, nil
@@ -530,6 +534,9 @@ func (daemon *Daemon) newContainer(name string, config *containertypes.Config, i
 
 // GetByName returns a container given a name.
 func (daemon *Daemon) GetByName(name string) (*container.Container, error) {
+	if len(name) == 0 {
+		return nil, fmt.Errorf("No container name supplied")
+	}
 	fullName := name
 	if name[0] != '/' {
 		fullName = "/" + name

+ 8 - 0
integration-cli/docker_api_containers_test.go

@@ -1616,3 +1616,11 @@ func (s *DockerSuite) TestPostContainersCreateWithOomScoreAdjInvalidRange(c *che
 		c.Fatalf("Expected output to contain %q, got %q", expected, string(b))
 	}
 }
+
+// test case for #22210 where an emtpy container name caused panic.
+func (s *DockerSuite) TestContainerApiDeleteWithEmptyName(c *check.C) {
+	status, out, err := sockRequest("DELETE", "/containers/", nil)
+	c.Assert(err, checker.IsNil)
+	c.Assert(status, checker.Equals, http.StatusBadRequest)
+	c.Assert(string(out), checker.Contains, "No container name or ID supplied")
+}