Permalink
Browse files

mime/multipart: permit empty file name

Fixes #19183

Change-Id: I11502d855f5b521b03ed7a63a990cca2d0ed4083
Reviewed-on: https://go-review.googlesource.com/70931
Reviewed-by: Ian Lance Taylor <iant@golang.org>
  • Loading branch information...
nilsmagnus authored and ianlancetaylor committed Oct 24, 2017
1 parent 3b9d947 commit 81ec7256072ed5e20b8827c583193258769aebc0
Showing with 28 additions and 1 deletion.
  1. +2 −1 src/mime/multipart/formdata.go
  2. +26 −0 src/mime/multipart/formdata_test.go
@@ -58,7 +58,8 @@ func (r *Reader) readForm(maxMemory int64) (_ *Form, err error) {
var b bytes.Buffer
if filename == "" {
_, hasContentTypeHeader := p.Header["Content-Type"]
if !hasContentTypeHeader && filename == "" {
// value, store as string in memory
n, err := io.CopyN(&b, p, maxValueBytes+1)
if err != nil && err != io.EOF {
@@ -38,6 +38,23 @@ func TestReadForm(t *testing.T) {
fd.Close()
}
func TestReadFormWithNamelessFile(t *testing.T) {
b := strings.NewReader(strings.Replace(messageWithFileWithoutName, "\n", "\r\n", -1))
r := NewReader(b, boundary)
f, err := r.ReadForm(25)
if err != nil {
t.Fatal("ReadForm:", err)
}
defer f.RemoveAll()
fd := testFile(t, f.File["hiddenfile"][0], "", filebContents)
if _, ok := fd.(sectionReadCloser); !ok {
t.Errorf("file has unexpected underlying type %T", fd)
}
fd.Close()
}
func testFile(t *testing.T, fh *FileHeader, efn, econtent string) File {
if fh.Filename != efn {
t.Errorf("filename = %q, want %q", fh.Filename, efn)
@@ -68,6 +85,15 @@ const (
boundary = `MyBoundary`
)
const messageWithFileWithoutName = `
--MyBoundary
Content-Disposition: form-data; name="hiddenfile"; filename=""
Content-Type: text/plain
` + filebContents + `
--MyBoundary--
`
const message = `
--MyBoundary
Content-Disposition: form-data; name="filea"; filename="filea.txt"

0 comments on commit 81ec725

Please sign in to comment.