Add missing bounds in ContinueOnError

ContinueOnError assumes that something of type errcode.Errors contains
at least one error. This is generally true, but might not be true if the
remote registry returns an empty error body or invalid JSON. Add the
bounds check, and in the case where it fails, allow fallbacks to v1.

Fixes #18481

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
This commit is contained in:
Aaron Lehmann 2015-12-07 17:28:10 -08:00
parent 3e88c525eb
commit 03778bd1d2

View file

@ -213,6 +213,9 @@ func (e ErrNoSupport) Error() string {
func ContinueOnError(err error) bool { func ContinueOnError(err error) bool {
switch v := err.(type) { switch v := err.(type) {
case errcode.Errors: case errcode.Errors:
if len(v) == 0 {
return true
}
return ContinueOnError(v[0]) return ContinueOnError(v[0])
case ErrNoSupport: case ErrNoSupport:
return ContinueOnError(v.Err) return ContinueOnError(v.Err)