1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #1943 from dotcloud/1940-prevent_crash_parseNat_build-fix

Abort build if mergeConfig returns an error and fix duplicate error message
This commit is contained in:
Michael Crosby 2013-10-15 17:40:48 -07:00
commit 4196c704f0
4 changed files with 37 additions and 6 deletions

3
api.go
View file

@ -908,8 +908,7 @@ func postBuild(srv *Server, version float64, w http.ResponseWriter, r *http.Requ
b := NewBuildFile(srv, utils.NewWriteFlusher(w), !suppressOutput, !noCache, rm) b := NewBuildFile(srv, utils.NewWriteFlusher(w), !suppressOutput, !noCache, rm)
id, err := b.Build(context) id, err := b.Build(context)
if err != nil { if err != nil {
fmt.Fprintf(w, "Error build: %s\n", err) return fmt.Errorf("Error build: %s", err)
return err
} }
if repoName != "" { if repoName != "" {
srv.runtime.repositories.Set(repoName, tag, id, false) srv.runtime.repositories.Set(repoName, tag, id, false)

View file

@ -283,7 +283,9 @@ func (runtime *Runtime) Create(config *Config) (*Container, error) {
} }
if img.Config != nil { if img.Config != nil {
MergeConfig(config, img.Config) if err := MergeConfig(config, img.Config); err != nil {
return nil, err
}
} }
if len(config.Entrypoint) != 0 && config.Cmd == nil { if len(config.Entrypoint) != 0 && config.Cmd == nil {

View file

@ -205,6 +205,29 @@ func TestRuntimeCreate(t *testing.T) {
if err == nil { if err == nil {
t.Fatal("Builder.Create should throw an error when Cmd is empty") t.Fatal("Builder.Create should throw an error when Cmd is empty")
} }
config := &Config{
Image: GetTestImage(runtime).ID,
Cmd: []string{"/bin/ls"},
PortSpecs: []string{"80"},
}
container, err = runtime.Create(config)
image, err := runtime.Commit(container, "testrepo", "testtag", "", "", config)
if err != nil {
t.Error(err)
}
_, err = runtime.Create(
&Config{
Image: image.ID,
PortSpecs: []string{"80000:80"},
},
)
if err == nil {
t.Fatal("Builder.Create should throw an error when PortSpecs is invalid")
}
} }
func TestDestroy(t *testing.T) { func TestDestroy(t *testing.T) {

View file

@ -65,7 +65,7 @@ func CompareConfig(a, b *Config) bool {
return true return true
} }
func MergeConfig(userConf, imageConf *Config) { func MergeConfig(userConf, imageConf *Config) error {
if userConf.User == "" { if userConf.User == "" {
userConf.User = imageConf.User userConf.User = imageConf.User
} }
@ -83,9 +83,15 @@ func MergeConfig(userConf, imageConf *Config) {
} else { } else {
for _, imagePortSpec := range imageConf.PortSpecs { for _, imagePortSpec := range imageConf.PortSpecs {
found := false found := false
imageNat, _ := parseNat(imagePortSpec) imageNat, err := parseNat(imagePortSpec)
if err != nil {
return err
}
for _, userPortSpec := range userConf.PortSpecs { for _, userPortSpec := range userConf.PortSpecs {
userNat, _ := parseNat(userPortSpec) userNat, err := parseNat(userPortSpec)
if err != nil {
return err
}
if imageNat.Proto == userNat.Proto && imageNat.Backend == userNat.Backend { if imageNat.Proto == userNat.Proto && imageNat.Backend == userNat.Backend {
found = true found = true
} }
@ -146,6 +152,7 @@ func MergeConfig(userConf, imageConf *Config) {
userConf.Volumes[k] = v userConf.Volumes[k] = v
} }
} }
return nil
} }
func parseLxcConfOpts(opts ListOpts) ([]KeyValuePair, error) { func parseLxcConfOpts(opts ListOpts) ([]KeyValuePair, error) {