diff options
| author | 2026-06-08 10:00:02 +0000 | |
|---|---|---|
| committer | 2026-06-08 10:00:02 +0000 | |
| commit | c59c5ec8ad129a385d1102cc45f90b92f23acd03 (patch) | |
| tree | 9a0537d76684fd2e095cb397404ccc6ac73f9158 | |
| parent | internal/iolimit: Add (diff) | |
| signature | No signature | |
internal/iolimit: Safe integer conversions
| -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) { |
