瀏覽代碼

api/server: better error checking to avoid unnecessary panics

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
Solomon Hykes 11 年之前
父節點
當前提交
f37ce76bf6
共有 1 個文件被更改,包括 6 次插入0 次删除
  1. 6 0
      api/server/server.go

+ 6 - 0
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
 // 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.
 // off a go routine to setup a serving http.Server for each.
 func ServeApi(job *engine.Job) engine.Status {
 func ServeApi(job *engine.Job) engine.Status {
+	if len(job.Args) == 0 {
+		return job.Errorf("usage: %s PROTO://ADDR [PROTO://ADDR ...]", job.Name)
+	}
 	var (
 	var (
 		protoAddrs = job.Args
 		protoAddrs = job.Args
 		chErrors   = make(chan error, len(protoAddrs))
 		chErrors   = make(chan error, len(protoAddrs))
@@ -1279,6 +1282,9 @@ func ServeApi(job *engine.Job) engine.Status {
 
 
 	for _, protoAddr := range protoAddrs {
 	for _, protoAddr := range protoAddrs {
 		protoAddrParts := strings.SplitN(protoAddr, "://", 2)
 		protoAddrParts := strings.SplitN(protoAddr, "://", 2)
+		if len(protoAddrParts) != 2 {
+			return job.Errorf("usage: %s PROTO://ADDR [PROTO://ADDR ...]", job.Name)
+		}
 		go func() {
 		go func() {
 			log.Printf("Listening for HTTP on %s (%s)\n", protoAddrParts[0], protoAddrParts[1])
 			log.Printf("Listening for HTTP on %s (%s)\n", protoAddrParts[0], protoAddrParts[1])
 			chErrors <- ListenAndServe(protoAddrParts[0], protoAddrParts[1], job)
 			chErrors <- ListenAndServe(protoAddrParts[0], protoAddrParts[1], job)