Sfoglia il codice sorgente

Fix invalid tag name

Signed-off-by: Lei Jitang <leijitang@huawei.com>
Lei Jitang 10 anni fa
parent
commit
e00cfbb6f2
3 ha cambiato i file con 33 aggiunte e 0 eliminazioni
  1. 24 0
      integration-cli/docker_cli_tag_test.go
  2. 6 0
      registry/config.go
  3. 3 0
      registry/registry_test.go

+ 24 - 0
integration-cli/docker_cli_tag_test.go

@@ -116,6 +116,30 @@ func (s *DockerSuite) TestTagExistedNameWithForce(c *check.C) {
 	}
 }
 
+func (s *DockerSuite) TestTagWithSuffixHyphen(c *check.C) {
+	if err := pullImageIfNotExist("busybox:latest"); err != nil {
+		c.Fatal("couldn't find the busybox:latest image locally and failed to pull it")
+	}
+	// test repository name begin with '-'
+	tagCmd := exec.Command(dockerBinary, "tag", "busybox:latest", "-busybox:test")
+	out, _, err := runCommandWithOutput(tagCmd)
+	if err == nil || !strings.Contains(out, "Invalid repository name (-busybox). Cannot begin or end with a hyphen") {
+		c.Fatal("tag a name begin with '-' should failed")
+	}
+	// test namespace name begin with '-'
+	tagCmd = exec.Command(dockerBinary, "tag", "busybox:latest", "-test/busybox:test")
+	out, _, err = runCommandWithOutput(tagCmd)
+	if err == nil || !strings.Contains(out, "Invalid namespace name (-test). Cannot begin or end with a hyphen") {
+		c.Fatal("tag a name begin with '-' should failed")
+	}
+	// test index name begin wiht '-'
+	tagCmd = exec.Command(dockerBinary, "tag", "busybox:latest", "-index:5000/busybox:test")
+	out, _, err = runCommandWithOutput(tagCmd)
+	if err == nil || !strings.Contains(out, "Invalid index name (-index:5000). Cannot begin or end with a hyphen") {
+		c.Fatal("tag a name begin with '-' should failed")
+	}
+}
+
 // ensure tagging using official names works
 // ensure all tags result in the same name
 func (s *DockerSuite) TestTagOfficialNames(c *check.C) {

+ 6 - 0
registry/config.go

@@ -198,6 +198,9 @@ func ValidateIndexName(val string) (string, error) {
 	if val == "index."+IndexServerName() {
 		val = IndexServerName()
 	}
+	if strings.HasPrefix(val, "-") || strings.HasSuffix(val, "-") {
+		return "", fmt.Errorf("Invalid index name (%s). Cannot begin or end with a hyphen.", val)
+	}
 	// *TODO: Check if valid hostname[:port]/ip[:port]?
 	return val, nil
 }
@@ -235,6 +238,9 @@ func validateRemoteName(remoteName string) error {
 	if !validRepo.MatchString(name) {
 		return fmt.Errorf("Invalid repository name (%s), only [a-z0-9-_.] are allowed", name)
 	}
+	if strings.HasPrefix(name, "-") || strings.HasSuffix(name, "-") {
+		return fmt.Errorf("Invalid repository name (%s). Cannot begin or end with a hyphen.", name)
+	}
 	return nil
 }
 

+ 3 - 0
registry/registry_test.go

@@ -299,6 +299,9 @@ func TestValidateRepositoryName(t *testing.T) {
 	invalidRepoNames := []string{
 		"https://github.com/docker/docker",
 		"docker/Docker",
+		"-docker",
+		"-docker/docker",
+		"-docker.io/docker/docker",
 		"docker///docker",
 		"docker.io/docker/Docker",
 		"docker.io/docker///docker",