From 6bbcb5a19bbd5cc462e6e120fb0acbc3704c8d77 Mon Sep 17 00:00:00 2001 From: Brad Davidson Date: Mon, 1 Apr 2024 23:47:10 +0000 Subject: [PATCH 1/2] Fix issue with empty host tree in hosts.toml Signed-off-by: Brad Davidson --- remotes/docker/config/hosts.go | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/remotes/docker/config/hosts.go b/remotes/docker/config/hosts.go index 4ea92f6e9563..59ca9e09f292 100644 --- a/remotes/docker/config/hosts.go +++ b/remotes/docker/config/hosts.go @@ -376,11 +376,6 @@ func parseHostsFile(baseDir string, b []byte) ([]hostConfig, error) { HostConfigs map[string]hostFileConfig `toml:"host"` }{} - orderedHosts, err := getSortedHosts(tree) - if err != nil { - return nil, err - } - var ( hosts []hostConfig ) @@ -389,15 +384,24 @@ func parseHostsFile(baseDir string, b []byte) ([]hostConfig, error) { return nil, err } - // Parse hosts array - for _, host := range orderedHosts { - config := c.HostConfigs[host] - - parsed, err := parseHostConfig(host, baseDir, config) + // The HostConfigs map is unordered, so we need to return the hosts sorted by + // line number in the file to honor the order requested by the user. + if len(c.HostConfigs) > 0 { + orderedHosts, err := getSortedHosts(tree) if err != nil { return nil, err } - hosts = append(hosts, parsed) + + // Parse hosts array + for _, host := range orderedHosts { + config := c.HostConfigs[host] + + parsed, err := parseHostConfig(host, baseDir, config) + if err != nil { + return nil, err + } + hosts = append(hosts, parsed) + } } // Parse root host config and append it as the last element From 09ca5406369efc4b1285840ef0e4efe549313929 Mon Sep 17 00:00:00 2001 From: Brad Davidson Date: Tue, 2 Apr 2024 18:20:48 +0000 Subject: [PATCH 2/2] Fix issue with empty host tree in hosts.toml Signed-off-by: Brad Davidson --- remotes/docker/config/hosts.go | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/remotes/docker/config/hosts.go b/remotes/docker/config/hosts.go index 59ca9e09f292..02e241a97a21 100644 --- a/remotes/docker/config/hosts.go +++ b/remotes/docker/config/hosts.go @@ -20,7 +20,6 @@ package config import ( "context" "crypto/tls" - "errors" "fmt" "net" "net/http" @@ -376,6 +375,11 @@ func parseHostsFile(baseDir string, b []byte) ([]hostConfig, error) { HostConfigs map[string]hostFileConfig `toml:"host"` }{} + orderedHosts, err := getSortedHosts(tree) + if err != nil { + return nil, err + } + var ( hosts []hostConfig ) @@ -384,24 +388,15 @@ func parseHostsFile(baseDir string, b []byte) ([]hostConfig, error) { return nil, err } - // The HostConfigs map is unordered, so we need to return the hosts sorted by - // line number in the file to honor the order requested by the user. - if len(c.HostConfigs) > 0 { - orderedHosts, err := getSortedHosts(tree) + // Parse hosts array + for _, host := range orderedHosts { + config := c.HostConfigs[host] + + parsed, err := parseHostConfig(host, baseDir, config) if err != nil { return nil, err } - - // Parse hosts array - for _, host := range orderedHosts { - config := c.HostConfigs[host] - - parsed, err := parseHostConfig(host, baseDir, config) - if err != nil { - return nil, err - } - hosts = append(hosts, parsed) - } + hosts = append(hosts, parsed) } // Parse root host config and append it as the last element @@ -534,7 +529,7 @@ func parseHostConfig(server string, baseDir string, config hostFileConfig) (host func getSortedHosts(root *toml.Tree) ([]string, error) { iter, ok := root.Get("host").(*toml.Tree) if !ok { - return nil, errors.New("invalid `host` tree") + return nil, nil } list := append([]string{}, iter.Keys()...)