From f8cb02bd82af3cab2234a0e703bc28a0fdb9e52f Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Thu, 1 May 2014 16:08:39 -0700 Subject: [PATCH] api/server: better error checking to avoid unnecessary panics Docker-DCO-1.1-Signed-off-by: Solomon Hykes (github: shykes) Upstream-commit: f37ce76bf68d4935accd1018c904e80e42066f9f Component: engine --- components/engine/api/server/server.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/components/engine/api/server/server.go b/components/engine/api/server/server.go index 5db9df1901..0f887a8aea 100644 --- a/components/engine/api/server/server.go +++ b/components/engine/api/server/server.go @@ -1267,6 +1267,9 @@ func ListenAndServe(proto, addr string, job *engine.Job) error { // ServeApi loops through all of the protocols sent in to docker and spawns // off a go routine to setup a serving http.Server for each. func ServeApi(job *engine.Job) engine.Status { + if len(job.Args) == 0 { + return job.Errorf("usage: %s PROTO://ADDR [PROTO://ADDR ...]", job.Name) + } var ( protoAddrs = job.Args chErrors = make(chan error, len(protoAddrs)) @@ -1279,6 +1282,9 @@ func ServeApi(job *engine.Job) engine.Status { for _, protoAddr := range protoAddrs { protoAddrParts := strings.SplitN(protoAddr, "://", 2) + if len(protoAddrParts) != 2 { + return job.Errorf("usage: %s PROTO://ADDR [PROTO://ADDR ...]", job.Name) + } go func() { log.Printf("Listening for HTTP on %s (%s)\n", protoAddrParts[0], protoAddrParts[1]) chErrors <- ListenAndServe(protoAddrParts[0], protoAddrParts[1], job)