Fix for Gitaly nil encoding issue

This commit is contained in:
Andrew Newdigate 2017-10-03 08:03:19 +00:00 committed by Sean McGivern
parent d14230dd6b
commit 27cc1c2b28
4 changed files with 18 additions and 2 deletions

View file

@ -233,6 +233,8 @@ module Gitlab
end
def self.encode(s)
return "" if s.nil?
s.dup.force_encoding(Encoding::ASCII_8BIT)
end

View file

@ -274,7 +274,7 @@ module Gitlab
repository: @gitaly_repo,
left_commit_id: from_id,
right_commit_id: to_id,
paths: options.fetch(:paths, []).map { |path| GitalyClient.encode(path) }
paths: options.fetch(:paths, []).compact.map { |path| GitalyClient.encode(path) }
}
end

View file

@ -53,7 +53,7 @@ describe Gitlab::GitalyClient::CommitService do
end
it 'encodes paths correctly' do
expect { client.diff_from_parent(commit, paths: ['encoding/test.txt', 'encoding/テスト.txt']) }.not_to raise_error
expect { client.diff_from_parent(commit, paths: ['encoding/test.txt', 'encoding/テスト.txt', nil]) }.not_to raise_error
end
end

View file

@ -38,6 +38,20 @@ describe Gitlab::GitalyClient, skip_gitaly_mock: true do
end
end
describe 'encode' do
[
[nil, ""],
["", ""],
[" ", " "],
%w(a1 a1),
["编码", "\xE7\xBC\x96\xE7\xA0\x81".b]
].each do |input, result|
it "encodes #{input.inspect} to #{result.inspect}" do
expect(described_class.encode(input)).to eq result
end
end
end
describe 'allow_n_plus_1_calls' do
context 'when RequestStore is enabled', :request_store do
it 'returns the result of the allow_n_plus_1_calls block' do