From: Tom Clegg Date: Mon, 11 Jul 2022 15:08:00 +0000 (-0400) Subject: 19249: Mime-encode metadata headers that have control chars. X-Git-Tag: 2.5.0~111^2~1 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/13736aa4f0feea65abce2aedc7c4ca0d18e01061 19249: Mime-encode metadata headers that have control chars. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- diff --git a/services/keep-web/s3.go b/services/keep-web/s3.go index 90b75f8a30..1f458f8e59 100644 --- a/services/keep-web/s3.go +++ b/services/keep-web/s3.go @@ -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) } } diff --git a/services/keep-web/s3_test.go b/services/keep-web/s3_test.go index 21ad974bb9..14dfa62dba 100644 --- a/services/keep-web/s3_test.go +++ b/services/keep-web/s3_test.go @@ -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",