From c59c5ec8ad129a385d1102cc45f90b92f23acd03 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Mon, 8 Jun 2026 10:00:02 +0000 Subject: internal/iolimit: Safe integer conversions --- internal/iolimit/expect_length_reader.go | 17 +++++++++++++++-- 1 file 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) { -- cgit v1.3.1-10-gc9f91