summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2011-01-01 13:40:36 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2011-01-01 13:40:36 +0000
commit488285e12321fc590dee0235470cfb12d77a3432 (patch)
treed8f44a7dad87372748a64e12cedf66148c0e85f9
parent1c7079db3fb099c6913353c9d56c27628b712026 (diff)
downloadredmine-488285e12321fc590dee0235470cfb12d77a3432.tar.gz
redmine-488285e12321fc590dee0235470cfb12d77a3432.zip
Strip non utf8 content when displaying diff (ruby1.9 compatibility).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4604 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/helpers/attachments_helper.rb8
-rw-r--r--app/views/common/_diff.rhtml4
-rw-r--r--test/fixtures/attachments.yml16
-rw-r--r--test/fixtures/files/060719210727_changeset_iso8859-1.diff (renamed from test/fixtures/files/060719210727_changeset.diff)6
-rw-r--r--test/fixtures/files/060719210727_changeset_utf8.diff13
-rw-r--r--test/functional/attachments_controller_test.rb29
6 files changed, 65 insertions, 11 deletions
diff --git a/app/helpers/attachments_helper.rb b/app/helpers/attachments_helper.rb
index 29cdb9790..50b44890f 100644
--- a/app/helpers/attachments_helper.rb
+++ b/app/helpers/attachments_helper.rb
@@ -29,6 +29,12 @@ module AttachmentsHelper
end
def to_utf8(str)
- str
+ return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
+ begin
+ Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + ' ')[0..-3]
+ rescue Iconv::InvalidEncoding
+ # "UTF-8//IGNORE" is not supported on some OS
+ str
+ end
end
end
diff --git a/app/views/common/_diff.rhtml b/app/views/common/_diff.rhtml
index 546644ded..619790c13 100644
--- a/app/views/common/_diff.rhtml
+++ b/app/views/common/_diff.rhtml
@@ -4,7 +4,7 @@
<% if diff_type == 'sbs' -%>
<table class="filecontent">
<thead>
-<tr><th colspan="4" class="filename"><%= table_file.file_name %></th></tr>
+<tr><th colspan="4" class="filename"><%=to_utf8 table_file.file_name %></th></tr>
</thead>
<tbody>
<% prev_line_left, prev_line_right = nil, nil -%>
@@ -31,7 +31,7 @@
<% else -%>
<table class="filecontent syntaxhl">
<thead>
-<tr><th colspan="3" class="filename"><%= table_file.file_name %></th></tr>
+<tr><th colspan="3" class="filename"><%=to_utf8 table_file.file_name %></th></tr>
</thead>
<tbody>
<% prev_line_left, prev_line_right = nil, nil -%>
diff --git a/test/fixtures/attachments.yml b/test/fixtures/attachments.yml
index 487ce5aa9..bd4a86ac6 100644
--- a/test/fixtures/attachments.yml
+++ b/test/fixtures/attachments.yml
@@ -54,11 +54,11 @@ attachments_005:
container_type: Issue
container_id: 3
downloads: 0
- disk_filename: 060719210727_changeset.diff
+ disk_filename: 060719210727_changeset_iso8859-1.diff
digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
id: 5
filesize: 687
- filename: changeset.diff
+ filename: changeset_iso8859-1.diff
author_id: 2
content_type: text/x-diff
attachments_006:
@@ -157,3 +157,15 @@ attachments_013:
filename: foo.zip
author_id: 2
content_type: application/octet-stream
+attachments_014:
+ created_on: 2006-07-19 21:07:27 +02:00
+ container_type: Issue
+ container_id: 3
+ downloads: 0
+ disk_filename: 060719210727_changeset_utf8.diff
+ digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
+ id: 14
+ filesize: 687
+ filename: changeset_utf8.diff
+ author_id: 2
+ content_type: text/x-diff
diff --git a/test/fixtures/files/060719210727_changeset.diff b/test/fixtures/files/060719210727_changeset_iso8859-1.diff
index af2c2068d..9bade6ab9 100644
--- a/test/fixtures/files/060719210727_changeset.diff
+++ b/test/fixtures/files/060719210727_changeset_iso8859-1.diff
@@ -1,10 +1,10 @@
Index: trunk/app/controllers/issues_controller.rb
===================================================================
---- trunk/app/controllers/issues_controller.rb (r‚vision 1483)
-+++ trunk/app/controllers/issues_controller.rb (r‚vision 1484)
+--- trunk/app/controllers/issues_controller.rb (révision 1483)
++++ trunk/app/controllers/issues_controller.rb (révision 1484)
@@ -149,7 +149,7 @@
attach_files(@issue, params[:attachments])
- flash[:notice] = l(:notice_successful_create)
+ flash[:notice] = 'Demande créée avec succès'
Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
- redirect_to :controller => 'issues', :action => 'show', :id => @issue, :project_id => @project
+ redirect_to :controller => 'issues', :action => 'show', :id => @issue
diff --git a/test/fixtures/files/060719210727_changeset_utf8.diff b/test/fixtures/files/060719210727_changeset_utf8.diff
new file mode 100644
index 000000000..e594f203a
--- /dev/null
+++ b/test/fixtures/files/060719210727_changeset_utf8.diff
@@ -0,0 +1,13 @@
+Index: trunk/app/controllers/issues_controller.rb
+===================================================================
+--- trunk/app/controllers/issues_controller.rb (révision 1483)
++++ trunk/app/controllers/issues_controller.rb (révision 1484)
+@@ -149,7 +149,7 @@
+ attach_files(@issue, params[:attachments])
+ flash[:notice] = 'Demande créée avec succès'
+ Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
+- redirect_to :controller => 'issues', :action => 'show', :id => @issue, :project_id => @project
++ redirect_to :controller => 'issues', :action => 'show', :id => @issue
+ return
+ end
+ end
diff --git a/test/functional/attachments_controller_test.rb b/test/functional/attachments_controller_test.rb
index be452bd43..f7293ff9c 100644
--- a/test/functional/attachments_controller_test.rb
+++ b/test/functional/attachments_controller_test.rb
@@ -1,5 +1,7 @@
-# redMine - project management software
-# Copyright (C) 2006-2008 Jean-Philippe Lang
+# encoding: utf-8
+#
+# Redmine - project management software
+# Copyright (C) 2006-2011 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -35,10 +37,31 @@ class AttachmentsControllerTest < ActionController::TestCase
end
def test_show_diff
- get :show, :id => 5
+ get :show, :id => 14 # 060719210727_changeset_utf8.diff
+ assert_response :success
+ assert_template 'diff'
+ assert_equal 'text/html', @response.content_type
+
+ assert_tag 'th',
+ :attributes => {:class => /filename/},
+ :content => /issues_controller.rb\t\(révision 1484\)/
+ assert_tag 'td',
+ :attributes => {:class => /line-code/},
+ :content => /Demande créée avec succès/
+ end
+
+ def test_show_diff_should_strip_non_utf8_content
+ get :show, :id => 5 # 060719210727_changeset_iso8859-1.diff
assert_response :success
assert_template 'diff'
assert_equal 'text/html', @response.content_type
+
+ assert_tag 'th',
+ :attributes => {:class => /filename/},
+ :content => /issues_controller.rb\t\(rvision 1484\)/
+ assert_tag 'td',
+ :attributes => {:class => /line-code/},
+ :content => /Demande cre avec succs/
end
def test_show_text_file