diff options
author | Nick Thomas <nick@gitlab.com> | 2019-04-11 15:29:08 +0100 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2019-04-16 15:16:23 +0100 |
commit | 670b2c1af55ab5e993f3a3b05a1078e394f9ceda (patch) | |
tree | 881907dee2f8af2bf6989a1d40923d1febf049fc | |
parent | 2845e8d9736b82c89ef33a3dd24caa4f9816b0e6 (diff) | |
download | gitlab-ce-670b2c1af55ab5e993f3a3b05a1078e394f9ceda.tar.gz |
JSON-encoded binary fields should use Base64::encode64
It is not interoperable to use Base64::urlsafe_encode64 for fields in
JSON that contain binary (as opposed to UTF8-safe) data. For instance,
the Golang JSON decoder (which is what gitlab-workhorse uses) insists
upon the standard base64 encoding.
-rw-r--r-- | lib/gitlab/workhorse.rb | 7 | ||||
-rw-r--r-- | spec/lib/gitlab/workhorse_spec.rb | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/lib/gitlab/workhorse.rb b/lib/gitlab/workhorse.rb index 533757d2237..2a8b1568f8b 100644 --- a/lib/gitlab/workhorse.rb +++ b/lib/gitlab/workhorse.rb @@ -229,12 +229,17 @@ module Gitlab protected + # This is the outermost encoding of a senddata: header. It is safe for + # inclusion in HTTP response headers def encode(hash) Base64.urlsafe_encode64(JSON.dump(hash)) end + # This is for encoding individual fields inside the senddata JSON that + # contain binary data. In workhorse, the corresponding struct field should + # be type []byte def encode_binary(binary) - Base64.urlsafe_encode64(binary) + Base64.encode64(binary) end def gitaly_server_hash(repository) diff --git a/spec/lib/gitlab/workhorse_spec.rb b/spec/lib/gitlab/workhorse_spec.rb index f8ce399287a..6f591ffaab0 100644 --- a/spec/lib/gitlab/workhorse_spec.rb +++ b/spec/lib/gitlab/workhorse_spec.rb @@ -39,7 +39,7 @@ describe Gitlab::Workhorse do token: Gitlab::GitalyClient.token(project.repository_storage) }, 'ArchivePath' => metadata['ArchivePath'], - 'GetArchiveRequest' => Base64.urlsafe_encode64( + 'GetArchiveRequest' => Base64.encode64( Gitaly::GetArchiveRequest.new( repository: repository.gitaly_repository, commit_id: metadata['CommitId'], |