aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2015-12-04 22:50:23 -0500
committerBrad Fitzpatrick <bradfitz@golang.org>2015-12-05 20:14:25 +0000
commit025e9b0ca32dd8a2ed5792eeecd8b8aa2ea068a8 (patch)
tree3e1f60de21461158cc008ff4a74f4a4db1b0b7a7 /src
parent35e84546d7c3cc599dd5bf31ad86bf8d3d841d04 (diff)
downloadgo-025e9b0ca32dd8a2ed5792eeecd8b8aa2ea068a8.tar.xz
mime: fix parsing of empty string attribute value
Fixes #11290. Change-Id: I312f0731077b78a4bed47062eb7fd1ab52bc3dd1 Reviewed-on: https://go-review.googlesource.com/17453 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/mime/mediatype.go5
-rw-r--r--src/mime/mediatype_test.go4
2 files changed, 7 insertions, 2 deletions
diff --git a/src/mime/mediatype.go b/src/mime/mediatype.go
index 6d4560a351..efee65bb00 100644
--- a/src/mime/mediatype.go
+++ b/src/mime/mediatype.go
@@ -289,10 +289,11 @@ func consumeMediaParam(v string) (param, value, rest string) {
}
rest = rest[1:] // consume equals sign
rest = strings.TrimLeftFunc(rest, unicode.IsSpace)
- value, rest = consumeValue(rest)
- if value == "" {
+ value, rest2 := consumeValue(rest)
+ if value == "" && rest2 == rest {
return "", "", v
}
+ rest = rest2
return param, value, rest
}
diff --git a/src/mime/mediatype_test.go b/src/mime/mediatype_test.go
index d018adef2f..9afa55825f 100644
--- a/src/mime/mediatype_test.go
+++ b/src/mime/mediatype_test.go
@@ -217,6 +217,9 @@ func TestParseMediaType(t *testing.T) {
{`form-data; firstname="Брэд"; lastname="Фицпатрик"`,
"form-data",
m("firstname", "Брэд", "lastname", "Фицпатрик")},
+
+ // Empty string used to be mishandled.
+ {`foo; bar=""`, "foo", m("bar", "")},
}
for _, test := range tests {
mt, params, err := ParseMediaType(test.in)
@@ -295,6 +298,7 @@ var formatTests = []formatTest{
{"foo/BAR", map[string]string{"nonascii": "not an ascii character: ä"}, ""},
{"foo/bar", map[string]string{"a": "av", "b": "bv", "c": "cv"}, "foo/bar; a=av; b=bv; c=cv"},
{"foo/bar", map[string]string{"0": "'", "9": "'"}, "foo/bar; 0='; 9='"},
+ {"foo", map[string]string{"bar": ""}, `foo; bar=""`},
}
func TestFormatMediaType(t *testing.T) {