Skip to content
Snippets Groups Projects
Commit 4ad982a9 authored by Vasilii Iakliushin's avatar Vasilii Iakliushin :two: Committed by Felipe Cardozo
Browse files

Add missing encoding for tag related fields

Contributes to #411267

**Problem**

The email of the user can have unsupported characters that can lead to
500 error.

**Solution**

Apply UTF-8 encoding for the data received from the Gitaly

Changelog: fixed
parent e8a51c9d
No related branches found
No related tags found
1 merge request!120627Add missing encoding for tag related fields
- user = user_email = nil
- if @tag.tagger
- user_email = @tag.tagger.email
- if @tag.user_email
- user_email = @tag.user_email
- user = User.find_by_any_email(user_email)
- add_to_breadcrumbs s_('TagsPage|Tags'), project_tags_path(@project)
- breadcrumb_title @tag.name
......
......@@ -76,8 +76,16 @@ def message
encode! @message
end
def tagger
@raw_tag.tagger
def user_name
encode! tagger.name if tagger
end
def user_email
encode! tagger.email if tagger
end
def date
Time.at(tagger.date.seconds).utc if tagger
end
def has_signature?
......@@ -105,6 +113,10 @@ def cache_key
private
def tagger
@raw_tag.tagger
end
def message_from_gitaly_tag
return @raw_tag.message.dup if full_message_fetched_from_gitaly?
......
......@@ -11,7 +11,7 @@ def signature
strong_memoize(:signature) do
super
signature = X509::Signature.new(signature_text, signed_text, @tag.tagger.email, Time.at(@tag.tagger.date.seconds))
signature = X509::Signature.new(signature_text, signed_text, @tag.user_email, @tag.date)
signature unless signature.verified_signature.nil?
end
end
......
......@@ -2,7 +2,7 @@
require "spec_helper"
RSpec.describe Gitlab::Git::Tag do
RSpec.describe Gitlab::Git::Tag, feature_category: :source_code_management do
let_it_be(:project) { create(:project, :repository) }
let_it_be(:repository) { project.repository.raw }
......@@ -17,10 +17,9 @@
it { expect(tag.has_signature?).to be_falsey }
it { expect(tag.signature_type).to eq(:NONE) }
it { expect(tag.signature).to be_nil }
it { expect(tag.tagger.name).to eq("Dmitriy Zaporozhets") }
it { expect(tag.tagger.email).to eq("dmitriy.zaporozhets@gmail.com") }
it { expect(tag.tagger.date).to eq(Google::Protobuf::Timestamp.new(seconds: 1393491299)) }
it { expect(tag.tagger.timezone).to eq("+0200") }
it { expect(tag.user_name).to eq("Dmitriy Zaporozhets") }
it { expect(tag.user_email).to eq("dmitriy.zaporozhets@gmail.com") }
it { expect(tag.date).to eq(Time.at(1393491299).utc) }
end
describe 'signed tag' do
......@@ -33,10 +32,9 @@
it { expect(tag.has_signature?).to be_truthy }
it { expect(tag.signature_type).to eq(:X509) }
it { expect(tag.signature).not_to be_nil }
it { expect(tag.tagger.name).to eq("Roger Meier") }
it { expect(tag.tagger.email).to eq("r.meier@siemens.com") }
it { expect(tag.tagger.date).to eq(Google::Protobuf::Timestamp.new(seconds: 1574261780)) }
it { expect(tag.tagger.timezone).to eq("+0100") }
it { expect(tag.user_name).to eq("Roger Meier") }
it { expect(tag.user_email).to eq("r.meier@siemens.com") }
it { expect(tag.date).to eq(Time.at(1574261780).utc) }
end
it { expect(repository.tags.size).to be > 0 }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment