diff options
| author | Kyren223 <ulmliad223@gmail.com> | 2024-10-16 16:03:21 +0300 |
|---|---|---|
| committer | Kyren223 <ulmliad223@gmail.com> | 2024-10-16 16:03:21 +0300 |
| commit | 8ff0032860cc4053e6f129e10da09535c27b55e8 (patch) | |
| tree | 809a418e61cfd91ef68ef02bd00a2ba2ecc70810 /pkg/util/io.go | |
| parent | 92306aea9b63181330f03b453dcc0d9e4fece17f (diff) | |
fix: channel reader incorrectly reading anything more than bufferSize
Diffstat (limited to 'pkg/util/io.go')
| -rw-r--r-- | pkg/util/io.go | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/pkg/util/io.go b/pkg/util/io.go index 8c8725b..5c489ed 100644 --- a/pkg/util/io.go +++ b/pkg/util/io.go @@ -19,7 +19,10 @@ func NewChannelReader(ctx context.Context, reader io.Reader) ChannelReader { go func(in chan<- []byte, inErr chan<- error) { defer close(in) defer close(inErr) - data := make([]byte, bufferSize) + buffer := make([]byte, 2 * bufferSize) + isD1 := true + d1 := buffer[:bufferSize] + d2 := buffer[bufferSize:] outer: for { select { @@ -27,9 +30,19 @@ func NewChannelReader(ctx context.Context, reader io.Reader) ChannelReader { inErr <- ctx.Err() break outer default: + var data []byte + if isD1 { + data = d1 + } else { + data = d2 + } + isD1 = !isD1 + n, err := reader.Read(data) - if err != nil && err != io.EOF { - inErr <- err + if err != nil { + if err != io.EOF { + inErr <- err + } break outer } in <- data[:n] |
