summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-09-02 12:25:28 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-09-02 12:25:28 +0000
commit28219ea9211d6caafa34620859ff0e879ec54c12 (patch)
tree76819d5aa057696a6cb58cfa4d36b2997836acec
parent6f19e8799e4c8233b01068bf6b5406b0ba1d1105 (diff)
parent551157960e70363d35a9b24d79780c9b98c9ef3b (diff)
downloadgitlab-ce-28219ea9211d6caafa34620859ff0e879ec54c12.tar.gz
Merge branch 'fix-raw-controller-disposition' into 'master'
Remove the filename argument from Content-Disposition header This MR removes the filename argument from the `Content-Disposition` header to avoid RFC 5987 and RFC 6266 encoding issues. Some browsers (e.g. Internet Explorer) do not properly decode a Unicode string properly, and this can lead to odd filenames in the raw file download. This change allows the browser to determine the filename based on the URL. For example, if I have a file called `한글한글.pptx` and click to download it with the "Raw" button in the Files section, IE11 will ask: ![image](https://gitlab.com/stanhu/gitlab-ce/uploads/fdb688282c0d4564872deadb44c58b2c/image.png) If you look at the `Content-Disposition` field, you see this: ![image](https://gitlab.com/stanhu/gitlab-ce/uploads/2b342b83ae1ec61fd31937163ace8ec5/image.png) Chrome, Firefox, and Safari seem to be able to handle UTF-8 encoded filenames, even though this is not standard. See: http://greenbytes.de/tech/tc2231/ Closes https://github.com/gitlabhq/gitlabhq/issues/9595 Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/1829 I've also submitted a pull request to Rails to support RFC 6266: https://github.com/rails/rails/pull/21461 See merge request !1235
-rw-r--r--CHANGELOG1
-rw-r--r--app/controllers/projects/raw_controller.rb3
-rw-r--r--spec/controllers/projects/raw_controller_spec.rb23
3 files changed, 25 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 0c401a99d48..e46fb5d6c1e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
Please view this file on the master branch, on stable branches it's out of date.
v 8.0.0 (unreleased)
+ - Omit filename in Content-Disposition header in raw file download to avoid RFC 6266 encoding issues (Stan HU)
- Prevent anchors from being hidden by header (Stan Hu)
- Fix bug where only the first 15 Bitbucket issues would be imported (Stan Hu)
- Sort issues by creation date in Bitbucket importer (Stan Hu)
diff --git a/app/controllers/projects/raw_controller.rb b/app/controllers/projects/raw_controller.rb
index 647c1454078..1a3df40dc75 100644
--- a/app/controllers/projects/raw_controller.rb
+++ b/app/controllers/projects/raw_controller.rb
@@ -17,8 +17,7 @@ class Projects::RawController < Projects::ApplicationController
send_data(
@blob.data,
type: type,
- disposition: 'inline',
- filename: @blob.name
+ disposition: 'inline'
)
else
not_found!
diff --git a/spec/controllers/projects/raw_controller_spec.rb b/spec/controllers/projects/raw_controller_spec.rb
new file mode 100644
index 00000000000..1f921d5f05d
--- /dev/null
+++ b/spec/controllers/projects/raw_controller_spec.rb
@@ -0,0 +1,23 @@
+require 'spec_helper'
+
+describe Projects::RawController do
+ let(:public_project) { create(:project, :public) }
+
+ describe "#show" do
+ context 'regular filename' do
+ let(:id) { 'master/README.md' }
+
+ it 'delivers ASCII file' do
+ get(:show,
+ namespace_id: public_project.namespace.to_param,
+ project_id: public_project.to_param,
+ id: id)
+
+ expect(response.status).to eq(200)
+ expect(response.header['Content-Type']).to eq('text/plain; charset=utf-8')
+ expect(response.header['Content-Disposition']).
+ to eq("inline")
+ end
+ end
+ end
+end