Commit 488285e1 authored by Jean-Philippe Lang's avatar Jean-Philippe Lang

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
parent 1c7079db
...@@ -29,6 +29,12 @@ module AttachmentsHelper ...@@ -29,6 +29,12 @@ module AttachmentsHelper
end end
def to_utf8(str) 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
end end
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<% if diff_type == 'sbs' -%> <% if diff_type == 'sbs' -%>
<table class="filecontent"> <table class="filecontent">
<thead> <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> </thead>
<tbody> <tbody>
<% prev_line_left, prev_line_right = nil, nil -%> <% prev_line_left, prev_line_right = nil, nil -%>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<% else -%> <% else -%>
<table class="filecontent syntaxhl"> <table class="filecontent syntaxhl">
<thead> <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> </thead>
<tbody> <tbody>
<% prev_line_left, prev_line_right = nil, nil -%> <% prev_line_left, prev_line_right = nil, nil -%>
......
...@@ -54,11 +54,11 @@ attachments_005: ...@@ -54,11 +54,11 @@ attachments_005:
container_type: Issue container_type: Issue
container_id: 3 container_id: 3
downloads: 0 downloads: 0
disk_filename: 060719210727_changeset.diff disk_filename: 060719210727_changeset_iso8859-1.diff
digest: b91e08d0cf966d5c6ff411bd8c4cc3a2 digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
id: 5 id: 5
filesize: 687 filesize: 687
filename: changeset.diff filename: changeset_iso8859-1.diff
author_id: 2 author_id: 2
content_type: text/x-diff content_type: text/x-diff
attachments_006: attachments_006:
...@@ -157,3 +157,15 @@ attachments_013: ...@@ -157,3 +157,15 @@ attachments_013:
filename: foo.zip filename: foo.zip
author_id: 2 author_id: 2
content_type: application/octet-stream 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
Index: trunk/app/controllers/issues_controller.rb Index: trunk/app/controllers/issues_controller.rb
=================================================================== ===================================================================
--- trunk/app/controllers/issues_controller.rb (rvision 1483) --- trunk/app/controllers/issues_controller.rb (révision 1483)
+++ trunk/app/controllers/issues_controller.rb (rvision 1484) +++ trunk/app/controllers/issues_controller.rb (révision 1484)
@@ -149,7 +149,7 @@ @@ -149,7 +149,7 @@
attach_files(@issue, params[:attachments]) 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') 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, :project_id => @project
+ redirect_to :controller => 'issues', :action => 'show', :id => @issue + redirect_to :controller => 'issues', :action => 'show', :id => @issue
......
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
# redMine - project management software # encoding: utf-8
# Copyright (C) 2006-2008 Jean-Philippe Lang #
# Redmine - project management software
# Copyright (C) 2006-2011 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
...@@ -35,10 +37,31 @@ class AttachmentsControllerTest < ActionController::TestCase ...@@ -35,10 +37,31 @@ class AttachmentsControllerTest < ActionController::TestCase
end end
def test_show_diff 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_response :success
assert_template 'diff' assert_template 'diff'
assert_equal 'text/html', @response.content_type 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 end
def test_show_text_file def test_show_text_file
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment