File tree Expand file tree Collapse file tree 2 files changed +37
-2
lines changed Expand file tree Collapse file tree 2 files changed +37
-2
lines changed Original file line number Diff line number Diff line change @@ -260,9 +260,10 @@ func (d *Decoder) WriteTo(w io.Writer) (int64, error) {
260
260
if len (d .current .b ) > 0 {
261
261
n2 , err2 := w .Write (d .current .b )
262
262
n += int64 (n2 )
263
- if err2 != nil && d .current .err == nil {
263
+ if err2 != nil && ( d .current .err == nil || d . current . err == io . EOF ) {
264
264
d .current .err = err2
265
- break
265
+ } else if n2 != len (d .current .b ) {
266
+ d .current .err = io .ErrShortWrite
266
267
}
267
268
}
268
269
if d .current .err != nil {
Original file line number Diff line number Diff line change @@ -165,6 +165,40 @@ func TestErrorReader(t *testing.T) {
165
165
}
166
166
}
167
167
168
+ type failingWriter struct {
169
+ err error
170
+ }
171
+
172
+ func (f failingWriter ) Write (_ []byte ) (n int , err error ) {
173
+ return 0 , f .err
174
+ }
175
+
176
+ func TestErrorWriter (t * testing.T ) {
177
+ input := make ([]byte , 100 )
178
+ cmp := bytes.Buffer {}
179
+ w , err := NewWriter (& cmp )
180
+ if err != nil {
181
+ t .Fatal (err )
182
+ }
183
+ _ , _ = rand .Read (input )
184
+ _ , err = w .Write (input )
185
+ if err != nil {
186
+ t .Fatal (err )
187
+ }
188
+ err = w .Close ()
189
+ if err != nil {
190
+ t .Fatal (err )
191
+ }
192
+ wantErr := fmt .Errorf ("i'm a failure" )
193
+ zr , err := NewReader (& cmp )
194
+ defer zr .Close ()
195
+ out := failingWriter {err : wantErr }
196
+ _ , err = zr .WriteTo (out )
197
+ if ! errors .Is (err , wantErr ) {
198
+ t .Errorf ("error: wanted: %v, got: %v" , wantErr , err )
199
+ }
200
+ }
201
+
168
202
func TestNewDecoder (t * testing.T ) {
169
203
defer timeout (60 * time .Second )()
170
204
testDecoderFile (t , "testdata/decoder.zip" )
You can’t perform that action at this time.
0 commit comments