diff options
Diffstat (limited to 'workhorse/internal/upload/rewrite_test.go')
-rw-r--r-- | workhorse/internal/upload/rewrite_test.go | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/workhorse/internal/upload/rewrite_test.go b/workhorse/internal/upload/rewrite_test.go index e3f33a02489..145f62ee910 100644 --- a/workhorse/internal/upload/rewrite_test.go +++ b/workhorse/internal/upload/rewrite_test.go @@ -1,6 +1,7 @@ package upload import ( + "net/textproto" "os" "runtime" "testing" @@ -54,3 +55,83 @@ func TestImageTypeRecongition(t *testing.T) { }) } } + +func TestParseAndNormalizeContentDisposition(t *testing.T) { + tests := []struct { + desc string + header string + name string + filename string + sanitizedHeader string + }{ + { + desc: "without content disposition", + header: "", + name: "", + filename: "", + sanitizedHeader: "", + }, { + desc: "content disposition without filename", + header: `form-data; name="filename"`, + name: "filename", + filename: "", + sanitizedHeader: `form-data; name=filename`, + }, { + desc: "with filename", + header: `form-data; name="file"; filename=foobar`, + name: "file", + filename: "foobar", + sanitizedHeader: `form-data; filename=foobar; name=file`, + }, { + desc: "with filename*", + header: `form-data; name="file"; filename*=UTF-8''bar`, + name: "file", + filename: "bar", + sanitizedHeader: `form-data; filename=bar; name=file`, + }, { + desc: "filename and filename*", + header: `form-data; name="file"; filename=foobar; filename*=UTF-8''bar`, + name: "file", + filename: "bar", + sanitizedHeader: `form-data; filename=bar; name=file`, + }, { + desc: "with empty filename", + header: `form-data; name="file"; filename=""`, + name: "file", + filename: "", + sanitizedHeader: `form-data; filename=""; name=file`, + }, { + desc: "with complex filename*", + header: `form-data; name="file"; filename*=UTF-8''viel%20Spa%C3%9F`, + name: "file", + filename: "viel Spaß", + sanitizedHeader: `form-data; filename*=utf-8''viel%20Spa%C3%9F; name=file`, + }, { + desc: "with unsupported charset", + header: `form-data; name="file"; filename*=UTF-16''bar`, + name: "file", + filename: "", + sanitizedHeader: `form-data; name=file`, + }, { + desc: "with filename and filename* with unsupported charset", + header: `form-data; name="file"; filename=foobar; filename*=UTF-16''bar`, + name: "file", + filename: "foobar", + sanitizedHeader: `form-data; filename=foobar; name=file`, + }, + } + + for _, testCase := range tests { + t.Run(testCase.desc, func(t *testing.T) { + h := make(textproto.MIMEHeader) + h.Set("Content-Disposition", testCase.header) + h.Set("Content-Type", "application/octet-stream") + + name, filename := parseAndNormalizeContentDisposition(h) + + require.Equal(t, testCase.name, name) + require.Equal(t, testCase.filename, filename) + require.Equal(t, testCase.sanitizedHeader, h.Get("Content-Disposition")) + }) + } +} |