Merge pull request #13787 from runcom/check-nil-Config
Avoid nil pointer dereference while creating a container with an empty Config
This commit is contained in:
commit
07b22fcf50
|
@ -658,10 +658,6 @@ func (s *Server) postCommit(version version.Version, w http.ResponseWriter, r *h
|
|||
return err
|
||||
}
|
||||
|
||||
if c == nil {
|
||||
c = &runconfig.Config{}
|
||||
}
|
||||
|
||||
containerCommitConfig := &daemon.ContainerCommitConfig{
|
||||
Pause: pause,
|
||||
Repo: r.Form.Get("repo"),
|
||||
|
|
|
@ -221,6 +221,10 @@ func Commit(d *daemon.Daemon, name string, c *daemon.ContainerCommitConfig) (str
|
|||
return "", err
|
||||
}
|
||||
|
||||
if c.Config == nil {
|
||||
c.Config = &runconfig.Config{}
|
||||
}
|
||||
|
||||
newConfig, err := BuildFromConfig(d, c.Config, c.Changes)
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
|
|
@ -15,6 +15,10 @@ import (
|
|||
)
|
||||
|
||||
func (daemon *Daemon) ContainerCreate(name string, config *runconfig.Config, hostConfig *runconfig.HostConfig) (string, []string, error) {
|
||||
if config == nil {
|
||||
return "", nil, fmt.Errorf("Config cannot be empty in order to create a container")
|
||||
}
|
||||
|
||||
warnings, err := daemon.verifyHostConfig(hostConfig)
|
||||
if err != nil {
|
||||
return "", warnings, err
|
||||
|
|
|
@ -836,6 +836,19 @@ func (s *DockerSuite) TestContainerApiCreate(c *check.C) {
|
|||
}
|
||||
}
|
||||
|
||||
func (s *DockerSuite) TestContainerApiCreateEmptyConfig(c *check.C) {
|
||||
config := map[string]interface{}{}
|
||||
|
||||
status, b, err := sockRequest("POST", "/containers/create", config)
|
||||
c.Assert(err, check.IsNil)
|
||||
c.Assert(status, check.Equals, http.StatusInternalServerError)
|
||||
|
||||
expected := "Config cannot be empty in order to create a container\n"
|
||||
if body := string(b); body != expected {
|
||||
c.Fatalf("Expected to get %q, got %q", expected, body)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *DockerSuite) TestContainerApiCreateWithHostName(c *check.C) {
|
||||
hostName := "test-host"
|
||||
config := map[string]interface{}{
|
||||
|
|
|
@ -143,6 +143,10 @@ func (c ContainerConfigWrapper) HostConfig() *HostConfig {
|
|||
return c.hostConfigWrapper.GetHostConfig()
|
||||
}
|
||||
|
||||
// DecodeContainerConfig decodes a json encoded config into a ContainerConfigWrapper
|
||||
// struct and returns both a Config and an HostConfig struct
|
||||
// Be aware this function is not checking whether the resulted structs are nil,
|
||||
// it's your business to do so
|
||||
func DecodeContainerConfig(src io.Reader) (*Config, *HostConfig, error) {
|
||||
decoder := json.NewDecoder(src)
|
||||
|
||||
|
|
Loading…
Reference in New Issue