Skip to content

Commit 79e0552

Browse files
authored
Merge pull request #5999 from dmcgowan/1.5-fix-unexpected-eof-handling
2 parents 78a5a2c + 210d3bc commit 79e0552

2 files changed

Lines changed: 17 additions & 4 deletions

File tree

content/helpers.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,14 @@ func Copy(ctx context.Context, cw Writer, r io.Reader, size int64, expected dige
144144
}
145145
}
146146

147-
if _, err := copyWithBuffer(cw, r); err != nil {
147+
copied, err := copyWithBuffer(cw, r)
148+
if err != nil {
148149
return errors.Wrap(err, "failed to copy")
149150
}
151+
if size != 0 && copied < size-ws.Offset {
152+
// Short writes would return its own error, this indicates a read failure
153+
return errors.Wrapf(io.ErrUnexpectedEOF, "failed to read expected number of bytes")
154+
}
150155

151156
if err := cw.Commit(ctx, size, expected, opts...); err != nil {
152157
if !errdefs.IsAlreadyExists(err) {
@@ -165,8 +170,15 @@ func CopyReaderAt(cw Writer, ra ReaderAt, n int64) error {
165170
return err
166171
}
167172

168-
_, err = copyWithBuffer(cw, io.NewSectionReader(ra, ws.Offset, n))
169-
return err
173+
copied, err := copyWithBuffer(cw, io.NewSectionReader(ra, ws.Offset, n))
174+
if err != nil {
175+
return errors.Wrap(err, "failed to copy")
176+
}
177+
if copied < n {
178+
// Short writes would return its own error, this indicates a read failure
179+
return errors.Wrap(io.ErrUnexpectedEOF, "failed to read expected number of bytes")
180+
}
181+
return nil
170182
}
171183

172184
// CopyReader copies to a writer from a given reader, returning

content/helpers_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,11 @@ func TestCopy(t *testing.T) {
6565
},
6666
{
6767
name: "commit already exists",
68-
source: defaultSource,
68+
source: newCopySource("this already exists"),
6969
writer: fakeWriter{commitFunc: func() error {
7070
return errdefs.ErrAlreadyExists
7171
}},
72+
expected: "this already exists",
7273
},
7374
}
7475

0 commit comments

Comments
 (0)