Browse Source

Do not generate all numberic truncated ids

Fixes #3869
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
Michael Crosby 11 năm trước cách đây
mục cha
commit
9b7054fd0b
1 tập tin đã thay đổi với 13 bổ sung5 xóa
  1. 13 5
      image.go

+ 13 - 5
image.go

@@ -203,12 +203,20 @@ func ValidateID(id string) error {
 }
 
 func GenerateID() string {
-	id := make([]byte, 32)
-	_, err := io.ReadFull(rand.Reader, id)
-	if err != nil {
-		panic(err) // This shouldn't happen
+	for {
+		id := make([]byte, 32)
+		if _, err := io.ReadFull(rand.Reader, id); err != nil {
+			panic(err) // This shouldn't happen
+		}
+		value := hex.EncodeToString(id)
+		// if we try to parse the truncated for as an int and we don't have
+		// an error then the value is all numberic and causes issues when
+		// used as a hostname. ref #3869
+		if _, err := strconv.Atoi(utils.TruncateID(value)); err == nil {
+			continue
+		}
+		return value
 	}
-	return hex.EncodeToString(id)
 }
 
 // Image includes convenience proxy functions to its graph