diff options
author | Aaron Patterson <tenderlove@github.com> | 2018-09-06 15:00:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-06 15:00:05 -0700 |
commit | b31ae3131a488aca3aac556f8f3ba26499c564e6 (patch) | |
tree | c94d1d8e53114ebde5a6e72339380b694c966447 | |
parent | 7fc545365cd219164e361b8e12b0995ca339477e (diff) | |
parent | 1d42a661d8ff7795ebf9255cb7efd17de7b47fb0 (diff) | |
download | rails-b31ae3131a488aca3aac556f8f3ba26499c564e6.tar.gz rails-b31ae3131a488aca3aac556f8f3ba26499c564e6.tar.bz2 rails-b31ae3131a488aca3aac556f8f3ba26499c564e6.zip |
Merge pull request #33808 from itsbagpack/fix-access-safety-buffer-slice
Maintain html_safe? on sliced HTML safe strings
-rw-r--r-- | activesupport/CHANGELOG.md | 7 | ||||
-rw-r--r-- | activesupport/lib/active_support/core_ext/string/output_safety.rb | 4 | ||||
-rw-r--r-- | activesupport/test/safe_buffer_test.rb | 12 |
3 files changed, 20 insertions, 3 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index 4ae02edd6a..6266eccc0d 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,3 +1,10 @@ +* Maintain `html_safe?` on html_safe strings when sliced + + string = "<div>test</div>".html_safe + string[-1..1].html_safe? # => true + + *Elom Gomez, Yumin Wong* + * Add `Array#extract!`. The method removes and returns the elements for which the block returns a true value. diff --git a/activesupport/lib/active_support/core_ext/string/output_safety.rb b/activesupport/lib/active_support/core_ext/string/output_safety.rb index f3bdc2977e..d837bb10aa 100644 --- a/activesupport/lib/active_support/core_ext/string/output_safety.rb +++ b/activesupport/lib/active_support/core_ext/string/output_safety.rb @@ -149,9 +149,7 @@ module ActiveSupport #:nodoc: end def [](*args) - if args.size < 2 - super - elsif html_safe? + if html_safe? new_safe_buffer = super if new_safe_buffer diff --git a/activesupport/test/safe_buffer_test.rb b/activesupport/test/safe_buffer_test.rb index 9456bb8753..70dec6b3d2 100644 --- a/activesupport/test/safe_buffer_test.rb +++ b/activesupport/test/safe_buffer_test.rb @@ -150,6 +150,18 @@ class SafeBufferTest < ActiveSupport::TestCase assert_not y.html_safe?, "should not be safe" end + test "Should continue safe on slice" do + x = "<div>foo</div>".html_safe + + assert_predicate x, :html_safe? + + # getting a slice of it + y = x[0..-1] + + # should still be safe + assert_predicate y, :html_safe? + end + test "Should work with interpolation (array argument)" do x = "foo %s bar".html_safe % ["qux"] assert_equal "foo qux bar", x |