aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPrem Sichanugrist <s@sikachu.com>2011-06-10 18:22:42 -0400
committerPrem Sichanugrist <s@sikachu.com>2011-06-10 18:51:48 -0400
commit115e80dccc65c3ed9a9750649d9ca4ea2a7e64f1 (patch)
treeed8e49d65afd73d5dd338cb62efbb9dedf70c9bc
parent37577988561e97e7ea154a7f90bfd8fe3db9426d (diff)
downloadrails-115e80dccc65c3ed9a9750649d9ca4ea2a7e64f1.tar.gz
rails-115e80dccc65c3ed9a9750649d9ca4ea2a7e64f1.tar.bz2
rails-115e80dccc65c3ed9a9750649d9ca4ea2a7e64f1.zip
Make sure that we don't perform in-place mutation on SafeBuffer string
This will make sure `render :inline` is working. Closes #1633
-rw-r--r--actionpack/lib/action_view/template.rb3
-rw-r--r--actionpack/test/template/template_test.rb5
2 files changed, 8 insertions, 0 deletions
diff --git a/actionpack/lib/action_view/template.rb b/actionpack/lib/action_view/template.rb
index 10797c010f..9c59d18310 100644
--- a/actionpack/lib/action_view/template.rb
+++ b/actionpack/lib/action_view/template.rb
@@ -218,6 +218,9 @@ module ActionView
method_name = self.method_name
if source.encoding_aware?
+ # Avoid performing in-place mutation for SafeBuffer
+ @source = source.to_str if source.html_safe?
+
# Look for # encoding: *. If we find one, we'll encode the
# String in that encoding, otherwise, we'll use the
# default external encoding.
diff --git a/actionpack/test/template/template_test.rb b/actionpack/test/template/template_test.rb
index b0ca7de0b6..2beb168a9d 100644
--- a/actionpack/test/template/template_test.rb
+++ b/actionpack/test/template/template_test.rb
@@ -172,5 +172,10 @@ class TestERBTemplate < ActiveSupport::TestCase
ensure
silence_warnings { Encoding.default_external = old }
end
+
+ def test_render_inline_safebuffer_should_not_raise_error
+ @template = new_template("Hello".html_safe)
+ render
+ end
end
end