Merge pull request #30763 from ripcurld0/fix_30714

Fix the create API when fromSrc has a bad URL
This commit is contained in:
Vincent Demeester 2017-03-28 10:20:59 +02:00 committed by GitHub
commit 35e5975b90
2 changed files with 29 additions and 6 deletions

View File

@ -6,6 +6,7 @@ import (
"net/http"
"net/url"
"runtime"
"strings"
"time"
"github.com/docker/distribution/reference"
@ -59,20 +60,19 @@ func (daemon *Daemon) ImportImage(src string, repository, tag string, msg string
rc = inConfig
} else {
inConfig.Close()
if len(strings.Split(src, "://")) == 1 {
src = "http://" + src
}
u, err := url.Parse(src)
if err != nil {
return err
}
if u.Scheme == "" {
u.Scheme = "http"
u.Host = src
u.Path = ""
}
outStream.Write(sf.FormatStatus("", "Downloading from %s", u))
resp, err = httputils.Download(u.String())
if err != nil {
return err
}
outStream.Write(sf.FormatStatus("", "Downloading from %s", u))
progressOutput := sf.NewProgressOutput(outStream, true)
rc = progress.NewProgressReader(resp.Body, progressOutput, resp.ContentLength, "", "Importing")
}

View File

@ -117,6 +117,29 @@ func (s *DockerSuite) TestAPIImagesHistory(c *check.C) {
c.Assert(historydata[0].Tags[0], checker.Equals, "test-api-images-history:latest")
}
func (s *DockerSuite) TestAPIImagesImportBadSrc(c *check.C) {
testRequires(c, Network)
tt := []struct {
statusExp int
fromSrc string
}{
{http.StatusNotFound, "http://example.com/nofile.tar"},
{http.StatusNotFound, "example.com/nofile.tar"},
{http.StatusNotFound, "example.com%2Fdata%2Ffile.tar"},
{http.StatusInternalServerError, "%2Fdata%2Ffile.tar"},
}
for _, te := range tt {
res, b, err := request.SockRequestRaw("POST", strings.Join([]string{"/images/create?fromSrc=", te.fromSrc}, ""), nil, "application/json", daemonHost())
c.Assert(err, check.IsNil)
b.Close()
c.Assert(res.StatusCode, checker.Equals, te.statusExp)
c.Assert(res.Header.Get("Content-Type"), checker.Equals, "application/json")
}
}
// #14846
func (s *DockerSuite) TestAPIImagesSearchJSONContentType(c *check.C) {
testRequires(c, Network)