From 716ebeb0c94128501124db643679704c9b6e9992 Mon Sep 17 00:00:00 2001 From: Nathan Baulch Date: Thu, 15 Jul 2021 11:23:36 +1000 Subject: [PATCH] Handle EOF from multipart form file readers --- util.go | 2 +- util_test.go | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/util.go b/util.go index d0abb4e7..a1010fb4 100644 --- a/util.go +++ b/util.go @@ -202,7 +202,7 @@ func writeMultipartFormFile(w *multipart.Writer, fieldName, fileName string, r i // Auto detect actual multipart content type cbuf := make([]byte, 512) size, err := r.Read(cbuf) - if err != nil { + if err != nil && err != io.EOF { return err } diff --git a/util_test.go b/util_test.go index e5690d49..ef2bb915 100644 --- a/util_test.go +++ b/util_test.go @@ -5,6 +5,8 @@ package resty import ( + "bytes" + "mime/multipart" "testing" ) @@ -79,3 +81,17 @@ func TestIsXMLType(t *testing.T) { } } } + +func TestWriteMultipartFormFileReaderEmpty(t *testing.T) { + w := multipart.NewWriter(bytes.NewBuffer(nil)) + defer func() { _ = w.Close() }() + if err := writeMultipartFormFile(w, "foo", "bar", bytes.NewReader(nil)); err != nil { + t.Errorf("Got unexpected error: %v", err) + } +} + +func TestWriteMultipartFormFileReaderError(t *testing.T) { + err := writeMultipartFormFile(nil, "", "", &brokenReadCloser{}) + assertNotNil(t, err) + assertEqual(t, "read error", err.Error()) +}