Remove invalid utf8 sequences from commit comments and author name (#4773).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3466 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
6e68921590
commit
46aa855572
|
@ -1,5 +1,5 @@
|
||||||
# Redmine - project management software
|
# Redmine - project management software
|
||||||
# Copyright (C) 2006-2008 Jean-Philippe Lang
|
# Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -57,6 +57,10 @@ class Changeset < ActiveRecord::Base
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def committer=(arg)
|
||||||
|
write_attribute(:committer, self.class.to_utf8(arg.to_s))
|
||||||
|
end
|
||||||
|
|
||||||
def project
|
def project
|
||||||
repository.project
|
repository.project
|
||||||
end
|
end
|
||||||
|
@ -180,11 +184,12 @@ class Changeset < ActiveRecord::Base
|
||||||
encoding = Setting.commit_logs_encoding.to_s.strip
|
encoding = Setting.commit_logs_encoding.to_s.strip
|
||||||
unless encoding.blank? || encoding == 'UTF-8'
|
unless encoding.blank? || encoding == 'UTF-8'
|
||||||
begin
|
begin
|
||||||
return Iconv.conv('UTF-8', encoding, str)
|
str = Iconv.conv('UTF-8', encoding, str)
|
||||||
rescue Iconv::Failure
|
rescue Iconv::Failure
|
||||||
# do nothing here
|
# do nothing here
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
str
|
# removes invalid UTF8 sequences
|
||||||
|
Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + ' ')[0..-3]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Texte encodé en ISO-8859-1.
|
|
@ -1,5 +1,7 @@
|
||||||
# redMine - project management software
|
# encoding: utf-8
|
||||||
# Copyright (C) 2006-2007 Jean-Philippe Lang
|
#
|
||||||
|
# Redmine - project management software
|
||||||
|
# Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -117,4 +119,18 @@ class ChangesetTest < ActiveSupport::TestCase
|
||||||
changeset = Changeset.find_by_revision('10')
|
changeset = Changeset.find_by_revision('10')
|
||||||
assert_nil changeset.next
|
assert_nil changeset.next
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_comments_should_be_converted_to_utf8
|
||||||
|
with_settings :commit_logs_encoding => 'ISO-8859-1' do
|
||||||
|
c = Changeset.new
|
||||||
|
c.comments = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
|
||||||
|
assert_equal "Texte encodé en ISO-8859-1.", c.comments
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_invalid_utf8_sequences_in_comments_should_be_stripped
|
||||||
|
c = Changeset.new
|
||||||
|
c.comments = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
|
||||||
|
assert_equal "Texte encod en ISO-8859-1.", c.comments
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue