summaryrefslogtreecommitdiff
path: root/pkg/util/io.go
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-10-16 16:03:21 +0300
committerKyren223 <ulmliad223@gmail.com>2024-10-16 16:03:21 +0300
commit8ff0032860cc4053e6f129e10da09535c27b55e8 (patch)
tree809a418e61cfd91ef68ef02bd00a2ba2ecc70810 /pkg/util/io.go
parent92306aea9b63181330f03b453dcc0d9e4fece17f (diff)
fix: channel reader incorrectly reading anything more than bufferSize
Diffstat (limited to 'pkg/util/io.go')
-rw-r--r--pkg/util/io.go19
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]