From 999ae1cb965c9cc162adcdd7c79fcfcc44c125df Mon Sep 17 00:00:00 2001 From: poornas Date: Tue, 6 Jun 2017 18:19:35 -0700 Subject: [PATCH] Fix browser download returning zero bytes for s3 (#4483) --- cmd/gateway-s3.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/cmd/gateway-s3.go b/cmd/gateway-s3.go index 027b1071a..709153e1f 100644 --- a/cmd/gateway-s3.go +++ b/cmd/gateway-s3.go @@ -261,8 +261,15 @@ func fromMinioClientListBucketResult(bucket string, result minio.ListBucketResul // length indicates the total length of the object. func (l *s3Objects) GetObject(bucket string, key string, startOffset int64, length int64, writer io.Writer) error { r := minio.NewGetReqHeaders() - if err := r.SetRange(startOffset, startOffset+length-1); err != nil { - return s3ToObjectError(traceError(err), bucket, key) + + if length < 0 && length != -1 { + return s3ToObjectError(traceError(errInvalidArgument), bucket, key) + } + + if startOffset >= 0 && length >= 0 { + if err := r.SetRange(startOffset, startOffset+length-1); err != nil { + return s3ToObjectError(traceError(err), bucket, key) + } } object, _, err := l.Client.GetObject(bucket, key, r) if err != nil { @@ -271,10 +278,9 @@ func (l *s3Objects) GetObject(bucket string, key string, startOffset int64, leng defer object.Close() - if _, err := io.CopyN(writer, object, length); err != nil { + if _, err := io.Copy(writer, object); err != nil { return s3ToObjectError(traceError(err), bucket, key) } - return nil }