From: Toshi MARUYAMA Date: Wed, 30 Aug 2017 16:39:41 +0000 (+0000) Subject: Merged r16957 from trunk to 3.3-stable (#26599) X-Git-Tag: 3.3.5~7 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=995a0111e94a68ae7d598b0690831f853ea2e4c7;p=redmine.git Merged r16957 from trunk to 3.3-stable (#26599) fix file name corruption when export a wiki page with non-ASCII title in MS browsers. Contributed by Go MAEDA. git-svn-id: http://svn.redmine.org/redmine/branches/3.3-stable@16960 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index 36a9b8741..ebf7a1884 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -97,14 +97,14 @@ class WikiController < ApplicationController end if User.current.allowed_to?(:export_wiki_pages, @project) if params[:format] == 'pdf' - send_file_headers! :type => 'application/pdf', :filename => "#{@page.title}.pdf" + send_file_headers! :type => 'application/pdf', :filename => filename_for_content_disposition("#{@page.title}.pdf") return elsif params[:format] == 'html' export = render_to_string :action => 'export', :layout => false - send_data(export, :type => 'text/html', :filename => "#{@page.title}.html") + send_data(export, :type => 'text/html', :filename => filename_for_content_disposition("#{@page.title}.html")) return elsif params[:format] == 'txt' - send_data(@content.text, :type => 'text/plain', :filename => "#{@page.title}.txt") + send_data(@content.text, :type => 'text/plain', :filename => filename_for_content_disposition("#{@page.title}.txt")) return end end diff --git a/test/functional/wiki_controller_test.rb b/test/functional/wiki_controller_test.rb index 14f9c2760..73d953c82 100644 --- a/test/functional/wiki_controller_test.rb +++ b/test/functional/wiki_controller_test.rb @@ -1,3 +1,5 @@ +# encoding: utf-8 +# # Redmine - project management software # Copyright (C) 2006-2016 Jean-Philippe Lang # @@ -989,6 +991,26 @@ class WikiControllerTest < ActionController::TestCase assert_include 'h1. CookBook documentation', @response.body end + def test_show_filename_should_be_uri_encoded_for_ms_browsers + @request.session[:user_id] = 2 + title = 'Этика_менеджмента' + %w|pdf html txt|.each do |format| + # Non-MS browsers + @request.user_agent = "" + get :show, :project_id => 1, :id => title, :format => format + assert_response :success + assert_equal "attachment; filename=\"#{title}.#{format}\"", + @response.headers['Content-Disposition'] + # Microsoft's browsers: filename should be URI encoded + @request.user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063' + get :show, :project_id => 1, :id => title, :format => format + assert_response :success + filename = URI.encode("#{title}.#{format}") + assert_equal "attachment; filename=\"#{filename}\"", + @response.headers['Content-Disposition'] + end + end + def test_edit_unprotected_page # Non members can edit unprotected wiki pages @request.session[:user_id] = 4