]> Cypherpunks repositories - gostls13.git/commitdiff
mime: fix parsing of empty string attribute value
authorRuss Cox <rsc@golang.org>
Sat, 5 Dec 2015 03:50:23 +0000 (22:50 -0500)
committerBrad Fitzpatrick <bradfitz@golang.org>
Sat, 5 Dec 2015 20:14:25 +0000 (20:14 +0000)
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>

src/mime/mediatype.go
src/mime/mediatype_test.go

index 6d4560a351b0375b843618366d69f247dd891576..efee65bb00b30e1cd05026ae0af07b818adb6853 100644 (file)
@@ -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
 }
 
index d018adef2f3d29a3eac88e9c2b9779bad1a09363..9afa55825fee8f9ce56e544274eb71d053bd03fe 100644 (file)
@@ -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) {