From 55111556748e2ed3a109f86f911df178ea6f26d9 Mon Sep 17 00:00:00 2001 From: Toshi MARUYAMA Date: Sat, 9 Apr 2011 08:07:22 +0000 Subject: [PATCH] scm: fix log converting error in Ruby 1.9 and add more tests. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5370 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/changeset.rb | 3 ++- test/unit/changeset_test.rb | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/models/changeset.rb b/app/models/changeset.rb index c227b7ec..9220282d 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -250,7 +250,8 @@ class Changeset < ActiveRecord::Base enc = encoding.blank? ? "UTF-8" : encoding if enc != "UTF-8" str.force_encoding(enc) - str = str.encode("UTF-8") + str = str.encode("UTF-8", :invalid => :replace, + :undef => :replace, :replace => '?') end if ! str.valid_encoding? str = str.encode("US-ASCII", :invalid => :replace, diff --git a/test/unit/changeset_test.rb b/test/unit/changeset_test.rb index 1c64d434..92a9aeb9 100644 --- a/test/unit/changeset_test.rb +++ b/test/unit/changeset_test.rb @@ -255,6 +255,30 @@ class ChangesetTest < ActiveSupport::TestCase end end + def test_invalid_utf8_sequences_in_comments_should_be_stripped_ja_jis + proj = Project.find(3) + str = "test\xb5\xfetest\xb5\xfe" + if str.respond_to?(:force_encoding) + str.force_encoding('ASCII-8BIT') + end + r = Repository::Bazaar.create!( + :project => proj, + :url => '/tmp/test/bazaar', + :log_encoding => 'ISO-2022-JP' ) + assert r + c = Changeset.new(:repository => r, + :committed_on => Time.now, + :revision => '123', + :scmid => '12345', + :comments => str) + assert( c.save ) + if str.respond_to?(:force_encoding) + assert_equal "test??test??", c.comments + else + assert_equal "testtest", c.comments + end + end + def test_comments_should_be_converted_all_latin1_to_utf8 s1 = "\xC2\x80" s2 = "\xc3\x82\xc2\x80"