Merge pull request #623 from justfalter/read-full

perf: ensure full write buffer for *File.ReadFrom
This commit is contained in:
Cassondra Foesch 2025-03-25 13:30:11 +00:00 committed by GitHub
commit 320d62f9de
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 6 additions and 4 deletions

View File

@ -1842,7 +1842,8 @@ func (f *File) readFromWithConcurrency(r io.Reader, concurrency int) (read int64
off := f.offset off := f.offset
for { for {
n, err := r.Read(b) // Fill the entire buffer.
n, err := io.ReadFull(r, b)
if n > 0 { if n > 0 {
read += int64(n) read += int64(n)
@ -1868,7 +1869,7 @@ func (f *File) readFromWithConcurrency(r io.Reader, concurrency int) (read int64
} }
if err != nil { if err != nil {
if err != io.EOF { if !errors.Is(err, io.EOF) && !errors.Is(err, io.ErrUnexpectedEOF) {
errCh <- rwErr{off, err} errCh <- rwErr{off, err}
} }
return return
@ -2022,7 +2023,8 @@ func (f *File) ReadFrom(r io.Reader) (int64, error) {
var read int64 var read int64
for { for {
n, err := r.Read(b) // Fill the entire buffer.
n, err := io.ReadFull(r, b)
if n < 0 { if n < 0 {
panic("sftp.File: reader returned negative count from Read") panic("sftp.File: reader returned negative count from Read")
} }
@ -2039,7 +2041,7 @@ func (f *File) ReadFrom(r io.Reader) (int64, error) {
} }
if err != nil { if err != nil {
if err == io.EOF { if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {
return read, nil // return nil explicitly. return read, nil // return nil explicitly.
} }