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()
|
||||
}
|
||||
|
||||
tmpErrs.Errors = append(tmpErrs.Errors, Error{
|
||||
tmpErr := Error{
|
||||
Code: err.Code,
|
||||
Message: msg,
|
||||
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)
|
||||
|
|
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) {
|
||||
if _, err := reference.ParseNormalizedNamed(repo); err != nil {
|
||||
if err == reference.ErrNameTooLong {
|
||||
return nil, distribution.ErrRepositoryNameInvalid{
|
||||
Name: repo,
|
||||
Reason: reference.ErrNameTooLong,
|
||||
}
|
||||
}
|
||||
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.
|
||||
func (rbds *redisBlobDescriptorService) RepositoryScoped(repo string) (distribution.BlobDescriptorService, error) {
|
||||
if _, err := reference.ParseNormalizedNamed(repo); err != nil {
|
||||
if err == reference.ErrNameTooLong {
|
||||
return nil, distribution.ErrRepositoryNameInvalid{
|
||||
Name: repo,
|
||||
Reason: reference.ErrNameTooLong,
|
||||
}
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue