simplify HardLimitReader by using LimitReader for internal usage (#17218)

This commit is contained in:
Klaus Post
2023-05-16 13:14:37 -07:00
committed by GitHub
parent 413549bcf5
commit aaf1abc993
6 changed files with 16 additions and 31 deletions

View File

@@ -67,6 +67,7 @@ type Reader struct {
//
// If size resp. actualSize is unknown at the time of calling
// NewReader then it should be set to -1.
// When size is >=0 it *must* match the amount of data provided by r.
//
// NewReader may try merge the given size, MD5 and SHA256 values
// into src - if src is a Reader - to avoid computing the same
@@ -75,10 +76,10 @@ type Reader struct {
// does not send more content than specified size.
func NewReader(src io.Reader, size int64, md5Hex, sha256Hex string, actualSize int64) (*Reader, error) {
// return hard limited reader
return newReader(src, size, md5Hex, sha256Hex, actualSize, true)
return newReader(src, size, md5Hex, sha256Hex, actualSize)
}
func newReader(src io.Reader, size int64, md5Hex, sha256Hex string, actualSize int64, hardLimitReader bool) (*Reader, error) {
func newReader(src io.Reader, size int64, md5Hex, sha256Hex string, actualSize int64) (*Reader, error) {
MD5, err := hex.DecodeString(md5Hex)
if err != nil {
return nil, BadDigest{ // TODO(aead): Return an error that indicates that an invalid ETag has been specified
@@ -119,12 +120,7 @@ func newReader(src io.Reader, size int64, md5Hex, sha256Hex string, actualSize i
r.checksum = MD5
r.contentSHA256 = SHA256
if r.size < 0 && size >= 0 {
switch hardLimitReader {
case true:
r.src = etag.Wrap(ioutil.HardLimitReader(r.src, size), r.src)
default:
r.src = etag.Wrap(io.LimitReader(r.src, size), r.src)
}
r.src = etag.Wrap(ioutil.HardLimitReader(r.src, size), r.src)
r.size = size
}
if r.actualSize <= 0 && actualSize >= 0 {
@@ -134,13 +130,7 @@ func newReader(src io.Reader, size int64, md5Hex, sha256Hex string, actualSize i
}
if size >= 0 {
var r io.Reader
switch hardLimitReader {
case true:
r = ioutil.HardLimitReader(src, size)
default:
r = io.LimitReader(src, size)
}
r := ioutil.HardLimitReader(src, size)
if _, ok := src.(etag.Tagger); !ok {
src = etag.NewReader(r, MD5)
} else {
@@ -163,13 +153,6 @@ func newReader(src io.Reader, size int64, md5Hex, sha256Hex string, actualSize i
}, nil
}
// NewLimitReader is similar to NewReader but it will read only up to actualsize specified. It will return
// EOF if actualsize is reached.
func NewLimitReader(src io.Reader, size int64, md5Hex, sha256Hex string, actualSize int64) (*Reader, error) {
// return io limited reader
return newReader(src, size, md5Hex, sha256Hex, actualSize, false)
}
// ErrInvalidChecksum is returned when an invalid checksum is provided in headers.
var ErrInvalidChecksum = errors.New("invalid checksum")