mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Ruby 1.9: fix Content-Length for multibyte send_data streaming
[#2661 state:resolved] Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
This commit is contained in:
parent
a606727606
commit
ec94c2550d
3 changed files with 17 additions and 1 deletions
|
@ -1,5 +1,7 @@
|
|||
*Edge*
|
||||
|
||||
* Ruby 1.9: fix Content-Length for multibyte send_data streaming. #2661 [Sava Chankov]
|
||||
|
||||
* Ruby 1.9: ERB template encoding using a magic comment at the top of the file. [Jeremy Kemper]
|
||||
<%# encoding: utf-8 %>
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
require 'active_support/core_ext/string/bytesize'
|
||||
|
||||
module ActionController #:nodoc:
|
||||
# Methods for sending arbitrary data and for streaming files to the browser,
|
||||
# instead of rendering.
|
||||
|
@ -142,7 +144,7 @@ module ActionController #:nodoc:
|
|||
# instead. See ActionController::Base#render for more information.
|
||||
def send_data(data, options = {}) #:doc:
|
||||
logger.info "Sending data #{options[:filename]}" if logger
|
||||
send_file_headers! options.merge(:length => data.size)
|
||||
send_file_headers! options.merge(:length => data.bytesize)
|
||||
@performed_render = false
|
||||
render :status => options[:status], :text => data
|
||||
end
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# encoding: utf-8
|
||||
require 'abstract_unit'
|
||||
|
||||
module TestFileUtils
|
||||
|
@ -22,6 +23,10 @@ class SendFileController < ActionController::Base
|
|||
def data
|
||||
send_data(file_data, options)
|
||||
end
|
||||
|
||||
def multibyte_text_data
|
||||
send_data("Кирилица\n祝您好運", options)
|
||||
end
|
||||
end
|
||||
|
||||
class SendFileTest < ActionController::TestCase
|
||||
|
@ -163,4 +168,11 @@ class SendFileTest < ActionController::TestCase
|
|||
assert_equal 200, @response.status
|
||||
end
|
||||
end
|
||||
|
||||
def test_send_data_content_length_header
|
||||
@controller.headers = {}
|
||||
@controller.options = { :type => :text, :filename => 'file_with_utf8_text' }
|
||||
process('multibyte_text_data')
|
||||
assert_equal '29', @controller.headers['Content-Length']
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue