1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Work around for upstream Ruby bug #10685

In f6e293ec54 we avoided a segfault in the
tests, however I think we should try to avoid the crash, as it may
happen in user code as well.

Here is what I distiled the bug down to:

```ruby
# Rails case - works on 2.0, 2.1; crashes on 2.2
require 'action_dispatch'

ActionDispatch::Response.new(200, "Content-Type" => "text/xml")

# General case - works on 2.0, 2.1; crashes on 2.2
def foo(optional = {}, default_argument: nil)
end

foo('quux' => 'bar')
```
This commit is contained in:
Genadi Samokovarov 2015-03-01 13:28:25 +02:00
parent 293bd95c3e
commit 707a433870
3 changed files with 5 additions and 3 deletions

View file

@ -113,7 +113,9 @@ module ActionDispatch # :nodoc:
# The underlying body, as a streamable object. # The underlying body, as a streamable object.
attr_reader :stream attr_reader :stream
def initialize(status = 200, header = {}, body = [], default_headers: self.class.default_headers) # Ruby 2.2 bug https://bugs.ruby-lang.org/issues/10685 prevents
# default_headers from being a keyword argument.
def initialize(status = 200, header = {}, body = [], default_headers = self.class.default_headers)
super() super()
header = merge_default_headers(header, default_headers) header = merge_default_headers(header, default_headers)

View file

@ -7,7 +7,7 @@ module ActionDispatch
# See Response for more information on controller response objects. # See Response for more information on controller response objects.
class TestResponse < Response class TestResponse < Response
def self.from_response(response) def self.from_response(response)
new response.status, response.headers, response.body, default_headers: nil new response.status, response.headers, response.body, nil
end end
# Was the response successful? # Was the response successful?

View file

@ -172,7 +172,7 @@ class ResponseTest < ActiveSupport::TestCase
original = ActionDispatch::Response.default_charset original = ActionDispatch::Response.default_charset
begin begin
ActionDispatch::Response.default_charset = 'utf-16' ActionDispatch::Response.default_charset = 'utf-16'
resp = ActionDispatch::Response.new(200, { "Content-Type" => "text/xml" }, default_headers: nil) resp = ActionDispatch::Response.new(200, { "Content-Type" => "text/xml" })
assert_equal('utf-16', resp.charset) assert_equal('utf-16', resp.charset)
ensure ensure
ActionDispatch::Response.default_charset = original ActionDispatch::Response.default_charset = original