aboutsummaryrefslogtreecommitdiff
path: root/src/mime
diff options
context:
space:
mode:
authorConstantin Konstantinidis <constantinkonstantinidis@gmail.com>2018-06-14 11:51:57 +0200
committerBrad Fitzpatrick <bradfitz@golang.org>2018-06-14 15:51:57 +0000
commit46076c37578fba9b49059584ef896099c9240fb2 (patch)
treefed2bcf87c0149c4bdbb2813cbd045e10df00ea1 /src/mime
parent90559ab9f2a6efaf03b428c0c4b5360d6a10462b (diff)
downloadgo-46076c37578fba9b49059584ef896099c9240fb2.tar.gz
go-46076c37578fba9b49059584ef896099c9240fb2.zip
mime/multipart: return error from NextPart if boundary is empty
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>
Diffstat (limited to 'src/mime')
-rw-r--r--src/mime/multipart/multipart.go4
-rw-r--r--src/mime/multipart/multipart_test.go8
2 files changed, 11 insertions, 1 deletions
diff --git a/src/mime/multipart/multipart.go b/src/mime/multipart/multipart.go
index adaaf6975a..b1b78ecb9a 100644
--- a/src/mime/multipart/multipart.go
+++ b/src/mime/multipart/multipart.go
@@ -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')
diff --git a/src/mime/multipart/multipart_test.go b/src/mime/multipart/multipart_test.go
index 7fbee90ac3..abe1cc8e77 100644
--- a/src/mime/multipart/multipart_test.go
+++ b/src/mime/multipart/multipart_test.go
@@ -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)
+ }
+}