]> Cypherpunks repositories - gostls13.git/commitdiff
mime/multipart: return error from NextPart if boundary is empty
authorConstantin Konstantinidis <constantinkonstantinidis@gmail.com>
Thu, 14 Jun 2018 09:51:57 +0000 (11:51 +0200)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 14 Jun 2018 15:51:57 +0000 (15:51 +0000)
NewReader cannot return an error. This behaviour is kept.
NextPart returns EOF when boundary is empty.
RFC 2046 does not allow it. The fix is to return an error
on the call of NextPart.

Fixes #23170

Change-Id: I775afd3f93e8b56e6cb274bc5c9de362a18bcc3c
Reviewed-on: https://go-review.googlesource.com/118822
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>

src/mime/multipart/multipart.go
src/mime/multipart/multipart_test.go

index adaaf6975a111b6c7875838f2e3c45fb80a5f011..b1b78ecb9adbf72787d99732a69282c3e44e96ec 100644 (file)
@@ -313,7 +313,9 @@ func (r *Reader) NextPart() (*Part, error) {
        if r.currentPart != nil {
                r.currentPart.Close()
        }
-
+       if string(r.dashBoundary) == "--" {
+               return nil, fmt.Errorf("multipart: boundary is empty")
+       }
        expectNewPart := false
        for {
                line, err := r.bufReader.ReadSlice('\n')
index 7fbee90ac38f3fd0145ce9e58870f852dd6d04e3..abe1cc8e77cc74e1d3672f19436982358a7373c4 100644 (file)
@@ -880,3 +880,11 @@ func roundTripParseTest() parseTest {
        t.sep = w.Boundary()
        return t
 }
+
+func TestNoBoundary(t *testing.T) {
+       mr := NewReader(strings.NewReader(""), "")
+       _, err := mr.NextPart()
+       if got, want := fmt.Sprint(err), "multipart: boundary is empty"; got != want {
+               t.Errorf("NextPart error = %v; want %v", got, want)
+       }
+}