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
This commit is contained in:
Jean-Philippe Lang 2011-01-01 13:40:36 +00:00
parent 1c7079db3f
commit 488285e123
6 changed files with 65 additions and 11 deletions

View File

@ -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

View File

@ -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 -%>

View File

@ -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

View File

@ -1,10 +1,10 @@
Index: trunk/app/controllers/issues_controller.rb
===================================================================
--- trunk/app/controllers/issues_controller.rb (rvision 1483)
+++ trunk/app/controllers/issues_controller.rb (rvision 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

View File

@ -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

View File

@ -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