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.
This commit is contained in:
Nick Thomas 2019-04-11 15:29:08 +01:00
parent 2845e8d973
commit 670b2c1af5
No known key found for this signature in database
GPG Key ID: 2A313A47AFADACE9
2 changed files with 7 additions and 2 deletions

View File

@ -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)

View File

@ -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'],