19249: Mime-encode metadata headers that have control chars.
authorTom Clegg <tom@curii.com>
Mon, 11 Jul 2022 15:08:00 +0000 (11:08 -0400)
committerTom Clegg <tom@curii.com>
Mon, 11 Jul 2022 15:08:00 +0000 (11:08 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

services/keep-web/s3.go
services/keep-web/s3_test.go

index 90b75f8a306019c2b646d15228da0c1c54a62956..1f458f8e59ad2e2fa9139d4e388fe8554f70a420 100644 (file)
@@ -607,7 +607,7 @@ func (h *handler) serveS3(w http.ResponseWriter, r *http.Request) bool {
 func setFileInfoHeaders(header http.Header, fs arvados.CustomFileSystem, path string) error {
        maybeEncode := func(s string) string {
                for _, c := range s {
-                       if c > '\u007f' {
+                       if c > '\u007f' || c < ' ' {
                                return mime.BEncoding.Encode("UTF-8", s)
                        }
                }
index 21ad974bb99a50fec4162a5477a6f2eb5a1d5f00..14dfa62dba6c0272628f86930d59d33e44fe3b8c 100644 (file)
@@ -259,7 +259,7 @@ func (s *IntegrationSuite) TestS3PropertiesAsMetadata(c *check.C) {
                "Array":    `["element1","element2"]`,
                "Object":   mime.BEncoding.Encode("UTF-8", `{"key":{"key2":"value⛵"}}`),
                "Nonascii": "=?UTF-8?b?4pu1?=",
-               "Newline":  "foo  X-Bad: header",
+               "Newline":  mime.BEncoding.Encode("UTF-8", "foo\r\nX-Bad: header"),
        }
        expectSubprojectTags := map[string]string{
                "Subproject_properties_key": "subproject properties value",