the trailing slash check caused a nil dereference

The disco package doesn't return errors, and a nil value indicates that
the input isn't valid. Always check for nil.
This commit is contained in:
James Bardin 2018-01-17 18:31:05 -05:00
parent 60c1f70705
commit 38f76ddc4e
2 changed files with 20 additions and 0 deletions

View File

@ -67,6 +67,9 @@ func NewClient(services *disco.Disco, creds auth.CredentialsSource, client *http
// Discover qeuries the host, and returns the url for the registry. // Discover qeuries the host, and returns the url for the registry.
func (c *Client) Discover(host svchost.Hostname) *url.URL { func (c *Client) Discover(host svchost.Hostname) *url.URL {
service := c.services.DiscoverServiceURL(host, serviceID) service := c.services.DiscoverServiceURL(host, serviceID)
if service == nil {
return nil
}
if !strings.HasSuffix(service.Path, "/") { if !strings.HasSuffix(service.Path, "/") {
service.Path += "/" service.Path += "/"
} }

View File

@ -55,6 +55,23 @@ func TestLookupModuleVersions(t *testing.T) {
} }
} }
func TestInvalidRegistry(t *testing.T) {
server := test.Registry()
defer server.Close()
client := NewClient(test.Disco(server), nil, nil)
src := "non-existent.localhost.localdomain/test-versions/name/provider"
modsrc, err := regsrc.ParseModuleSource(src)
if err != nil {
t.Fatal(err)
}
if _, err := client.Versions(modsrc); err == nil {
t.Fatal("expected error")
}
}
func TestRegistryAuth(t *testing.T) { func TestRegistryAuth(t *testing.T) {
server := test.Registry() server := test.Registry()
defer server.Close() defer server.Close()