diff options
| -rw-r--r-- | internal/iolimit/expect_length_reader.go | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/internal/iolimit/expect_length_reader.go b/internal/iolimit/expect_length_reader.go index 317f1b16..1efe2b75 100644 --- a/internal/iolimit/expect_length_reader.go +++ b/internal/iolimit/expect_length_reader.go @@ -2,7 +2,10 @@ package iolimit import ( "errors" + "fmt" "io" + + "lindenii.org/go/lgo/intconv" ) // ErrExpectedLengthExceeded reports that a stream @@ -54,12 +57,22 @@ func (reader *expectLengthReader) Read(dst []byte) (int, error) { } if uint64(len(dst)) > reader.remaining { - dst = dst[:int(reader.remaining)] + limit, err := intconv.Uint64ToInt(reader.remaining) + if err != nil { + return 0, fmt.Errorf("iolimit: %w", err) + } + + dst = dst[:limit] } n, err := reader.src.Read(dst) if n > 0 { - reader.remaining -= uint64(n) + read, convErr := intconv.IntToUint64(n) + if convErr != nil { + return n, fmt.Errorf("iolimit: %w", convErr) + } + + reader.remaining -= read } if errors.Is(err, io.EOF) { |
