aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2012-04-25 15:44:30 -0400
committerRuss Cox <rsc@golang.org>2012-04-25 15:44:30 -0400
commit8f2d48993ab3fc01ea9f8c994bfc092afe864681 (patch)
tree3b931d4631dfa4e51bc6620deecc9284774fcb58
parenta8cea4cda01af28a505549958149c5fc5e45191d (diff)
downloadgo-8f2d48993ab3fc01ea9f8c994bfc092afe864681.tar.gz
go-8f2d48993ab3fc01ea9f8c994bfc092afe864681.zip
[release-branch.go1] mime: make ParseMediaType return zero results on error
««« CL 6119051 / 1384d7510575 mime: make ParseMediaType return zero results on error Fixes #3562 R=golang-dev, adg, rsc CC=golang-dev https://golang.org/cl/6119051 »»» R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/6127045
-rw-r--r--src/pkg/mime/mediatype.go2
-rw-r--r--src/pkg/mime/mediatype_test.go32
2 files changed, 27 insertions, 7 deletions
diff --git a/src/pkg/mime/mediatype.go b/src/pkg/mime/mediatype.go
index 9398dece1d..8396c0a155 100644
--- a/src/pkg/mime/mediatype.go
+++ b/src/pkg/mime/mediatype.go
@@ -99,7 +99,7 @@ func ParseMediaType(v string) (mediatype string, params map[string]string, err e
err = checkMediaTypeDisposition(mediatype)
if err != nil {
- return
+ return "", nil, err
}
params = make(map[string]string)
diff --git a/src/pkg/mime/mediatype_test.go b/src/pkg/mime/mediatype_test.go
index 64ab291341..e41ead237a 100644
--- a/src/pkg/mime/mediatype_test.go
+++ b/src/pkg/mime/mediatype_test.go
@@ -244,13 +244,33 @@ func TestParseMediaType(t *testing.T) {
}
}
+type badMediaTypeTest struct {
+ in string
+ err string
+}
+
+var badMediaTypeTests = []badMediaTypeTest{
+ {"bogus ;=========", "mime: invalid media parameter"},
+ {"bogus/<script>alert</script>", "mime: expected token after slash"},
+ {"bogus/bogus<script>alert</script>", "mime: unexpected content after media subtype"},
+}
+
func TestParseMediaTypeBogus(t *testing.T) {
- mt, params, err := ParseMediaType("bogus ;=========")
- if err == nil {
- t.Fatalf("expected an error parsing invalid media type; got type %q, params %#v", mt, params)
- }
- if err.Error() != "mime: invalid media parameter" {
- t.Errorf("expected invalid media parameter; got error %q", err)
+ for _, tt := range badMediaTypeTests {
+ mt, params, err := ParseMediaType(tt.in)
+ if err == nil {
+ t.Errorf("ParseMediaType(%q) = nil error; want parse error", tt.in)
+ continue
+ }
+ if err.Error() != tt.err {
+ t.Errorf("ParseMediaType(%q) = err %q; want %q", tt.in, err.Error(), tt.err)
+ }
+ if params != nil {
+ t.Errorf("ParseMediaType(%q): got non-nil params on error", tt.in)
+ }
+ if mt != "" {
+ t.Errorf("ParseMediaType(%q): got non-empty media type string on error", tt.in)
+ }
}
}