]> Cypherpunks repositories - gostls13.git/commitdiff
mime: allow duplicate media type parameters with equivalent values
authorPaschalis Tsilias <paschalis.tsilias@gmail.com>
Wed, 10 Nov 2021 20:14:03 +0000 (22:14 +0200)
committerDamien Neil <dneil@google.com>
Fri, 26 Aug 2022 17:58:37 +0000 (17:58 +0000)
Fixes #48866

Change-Id: I2bd2c806e44eb4064b1fb9a6509d79cecbbef013
Reviewed-on: https://go-review.googlesource.com/c/go/+/363094
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Tim King <taking@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: David Chase <drchase@google.com>
src/mime/mediatype.go
src/mime/mediatype_test.go

index 6c1b095065a8bd59e2d1ea6d9b2af0b3aa9c1f94..bc8d417e62893e9aa28709ca88f6c056ad5caef0 100644 (file)
@@ -180,8 +180,8 @@ func ParseMediaType(v string) (mediatype string, params map[string]string, err e
                                pmap = continuation[baseName]
                        }
                }
-               if _, exists := pmap[key]; exists {
-                       // Duplicate parameter name is bogus.
+               if v, exists := pmap[key]; exists && v != value {
+                       // Duplicate parameter names are incorrect, but we allow them if they are equal.
                        return "", nil, errors.New("mime: duplicate parameter name")
                }
                pmap[key] = value
index 079c080db716f19caee14186cc02baf2cf5bfc44..1458cdb6e2dd824f2b34ae8a425675fd8682ae2e 100644 (file)
@@ -407,8 +407,11 @@ func TestParseMediaType(t *testing.T) {
                        `message/external-body`,
                        m("access-type", "URL", "url", "ftp://cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar"),
                },
-       }
 
+               // Issue #48866: duplicate parameters containing equal values should be allowed
+               {`text; charset=utf-8; charset=utf-8; format=fixed`, "text", m("charset", "utf-8", "format", "fixed")},
+               {`text; charset=utf-8; format=flowed; charset=utf-8`, "text", m("charset", "utf-8", "format", "flowed")},
+       }
        for _, test := range tests {
                mt, params, err := ParseMediaType(test.in)
                if err != nil {