From 13736aa4f0feea65abce2aedc7c4ca0d18e01061 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Mon, 11 Jul 2022 11:08:00 -0400 Subject: [PATCH] 19249: Mime-encode metadata headers that have control chars. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- services/keep-web/s3.go | 2 +- services/keep-web/s3_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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", -- 2.30.2