diff --git a/image/image.go b/image/image.go index 4702919ab4..d9326fbd17 100644 --- a/image/image.go +++ b/image/image.go @@ -46,6 +46,9 @@ func New(root string) (*Store, error) { // Import creates a new image from the contents of `archive` and registers it in the store as `name`. // If `parent` is not nil, it will registered as the parent of the new image. func (store *Store) Import(name string, archive io.Reader, parent *Image) (*Image, error) { + if strings.Contains(name, ":") { + return nil, errors.New("Invalid image name: " + name) + } layer, err := store.Layers.AddLayer(archive) if err != nil { return nil, err @@ -62,6 +65,9 @@ func (store *Store) Import(name string, archive io.Reader, parent *Image) (*Imag } func (store *Store) Create(name string, source string, layers ...string) (*Image, error) { + if strings.Contains(name, ":") { + return nil, errors.New("Invalid image name: " + name) + } image, err := NewImage(name, layers, source) if err != nil { return nil, err diff --git a/server/server.go b/server/server.go index 17dc7705c4..d52666d8f6 100644 --- a/server/server.go +++ b/server/server.go @@ -411,6 +411,9 @@ func (srv *Server) CmdPull(stdin io.ReadCloser, stdout io.Writer, args ...string if name == "" { return errors.New("Not enough arguments") } + if strings.Contains(name, ":") { + return errors.New("Invalid image name: " + name) + } u, err := url.Parse(name) if err != nil { return err @@ -828,10 +831,13 @@ func (srv *Server) CmdRun(stdin io.ReadCloser, stdout io.Writer, args ...string) img = srv.images.Find(name) if img == nil { stdin_noclose := ioutil.NopCloser(stdin) - if srv.CmdPull(stdin_noclose, stdout, name) != nil { - return errors.New("Error downloading image: " + name) + if err := srv.CmdPull(stdin_noclose, stdout, name); err != nil { + return err } img = srv.images.Find(name) + if img == nil { + return errors.New("Could not find image after downloading: " + name) + } } // Create new container