浏览代码

check for errors in call, not readBody

Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
Victor Vieux 11 年之前
父节点
当前提交
abbae8f764
共有 1 个文件被更改,包括 12 次插入6 次删除
  1. 12 6
      commands.go

+ 12 - 6
commands.go

@@ -2319,6 +2319,18 @@ func (cli *DockerCli) call(method, path string, data interface{}, passAuthInfo b
 		}
 		}
 		return nil, -1, err
 		return nil, -1, err
 	}
 	}
+
+	if resp.StatusCode < 200 || resp.StatusCode >= 400 {
+		body, err := ioutil.ReadAll(resp.Body)
+		if err != nil {
+			return nil, -1, err
+		}
+		if len(body) == 0 {
+			return nil, resp.StatusCode, fmt.Errorf("Error :%s", http.StatusText(resp.StatusCode))
+		}
+		return nil, resp.StatusCode, fmt.Errorf("Error: %s", bytes.TrimSpace(body))
+	}
+
 	wrapper := utils.NewReadCloserWrapper(resp.Body, func() error {
 	wrapper := utils.NewReadCloserWrapper(resp.Body, func() error {
 		if resp != nil && resp.Body != nil {
 		if resp != nil && resp.Body != nil {
 			resp.Body.Close()
 			resp.Body.Close()
@@ -2598,12 +2610,6 @@ func readBody(stream io.ReadCloser, statusCode int, err error) ([]byte, int, err
 	if err != nil {
 	if err != nil {
 		return nil, -1, err
 		return nil, -1, err
 	}
 	}
-	if statusCode < 200 || statusCode >= 400 {
-		if len(body) == 0 {
-			return nil, statusCode, fmt.Errorf("Error: %s", http.StatusText(statusCode))
-		}
-		return nil, statusCode, fmt.Errorf("Error: %s", bytes.TrimSpace(body))
-	}
 	return body, statusCode, nil
 	return body, statusCode, nil
 }
 }