forked from TrueCloudLab/distribution
fix: if reference exceeds max threshold return 400 and detail (#4168)
This commit is contained in:
commit
97f8a6c959
3 changed files with 23 additions and 2 deletions
|
@ -224,11 +224,20 @@ func (errs Errors) MarshalJSON() ([]byte, error) {
|
||||||
msg = err.Code.Message()
|
msg = err.Code.Message()
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpErrs.Errors = append(tmpErrs.Errors, Error{
|
tmpErr := Error{
|
||||||
Code: err.Code,
|
Code: err.Code,
|
||||||
Message: msg,
|
Message: msg,
|
||||||
Detail: err.Detail,
|
Detail: err.Detail,
|
||||||
})
|
}
|
||||||
|
|
||||||
|
// if the detail contains error extract the error message
|
||||||
|
// otherwise json.Marshal will not serialize it at all
|
||||||
|
// https://github.com/golang/go/issues/10748
|
||||||
|
if detail, ok := tmpErr.Detail.(error); ok {
|
||||||
|
tmpErr.Detail = detail.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpErrs.Errors = append(tmpErrs.Errors, tmpErr)
|
||||||
}
|
}
|
||||||
|
|
||||||
return json.Marshal(tmpErrs)
|
return json.Marshal(tmpErrs)
|
||||||
|
|
6
registry/storage/cache/memory/memory.go
vendored
6
registry/storage/cache/memory/memory.go
vendored
|
@ -47,6 +47,12 @@ func NewInMemoryBlobDescriptorCacheProvider(size int) cache.BlobDescriptorCacheP
|
||||||
|
|
||||||
func (imbdcp *inMemoryBlobDescriptorCacheProvider) RepositoryScoped(repo string) (distribution.BlobDescriptorService, error) {
|
func (imbdcp *inMemoryBlobDescriptorCacheProvider) RepositoryScoped(repo string) (distribution.BlobDescriptorService, error) {
|
||||||
if _, err := reference.ParseNormalizedNamed(repo); err != nil {
|
if _, err := reference.ParseNormalizedNamed(repo); err != nil {
|
||||||
|
if err == reference.ErrNameTooLong {
|
||||||
|
return nil, distribution.ErrRepositoryNameInvalid{
|
||||||
|
Name: repo,
|
||||||
|
Reason: reference.ErrNameTooLong,
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
6
registry/storage/cache/redis/redis.go
vendored
6
registry/storage/cache/redis/redis.go
vendored
|
@ -50,6 +50,12 @@ func NewRedisBlobDescriptorCacheProvider(pool *redis.Client) cache.BlobDescripto
|
||||||
// RepositoryScoped returns the scoped cache.
|
// RepositoryScoped returns the scoped cache.
|
||||||
func (rbds *redisBlobDescriptorService) RepositoryScoped(repo string) (distribution.BlobDescriptorService, error) {
|
func (rbds *redisBlobDescriptorService) RepositoryScoped(repo string) (distribution.BlobDescriptorService, error) {
|
||||||
if _, err := reference.ParseNormalizedNamed(repo); err != nil {
|
if _, err := reference.ParseNormalizedNamed(repo); err != nil {
|
||||||
|
if err == reference.ErrNameTooLong {
|
||||||
|
return nil, distribution.ErrRepositoryNameInvalid{
|
||||||
|
Name: repo,
|
||||||
|
Reason: reference.ErrNameTooLong,
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue