Skip to content

Commit 4df0563

Browse files
authored
Merge pull request rails#36981 from tsuka/fix-tag-builder
Prevent TagBuilder modify options
2 parents da87a7c + 0a77c05 commit 4df0563

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

actionview/lib/action_view/helpers/tag_helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def tag_option(key, value, escape)
8888
if value.is_a?(Array)
8989
value = escape ? safe_join(value, " ") : value.join(" ")
9090
else
91-
value = escape ? ERB::Util.unwrapped_html_escape(value) : value.to_s.dup
91+
value = escape ? ERB::Util.unwrapped_html_escape(value).dup : value.to_s.dup
9292
end
9393
value.gsub!('"', """)
9494
%(#{key}="#{value}")

actionview/test/template/tag_helper_test.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ def test_tag_builder_options_converts_boolean_option
7979
tag.p(disabled: true, itemscope: true, multiple: true, readonly: true, allowfullscreen: true, seamless: true, typemustmatch: true, sortable: true, default: true, inert: true, truespeed: true)
8080
end
8181

82+
def test_tag_builder_do_not_modify_html_safe_options
83+
html_safe_str = '"'.html_safe
84+
assert_equal "<p value=\"&quot;\" />", tag("p", value: html_safe_str)
85+
assert_equal '"', html_safe_str
86+
assert html_safe_str.html_safe?
87+
end
88+
8289
def test_content_tag
8390
assert_equal "<a href=\"create\">Create</a>", content_tag("a", "Create", "href" => "create")
8491
assert_predicate content_tag("a", "Create", "href" => "create"), :html_safe?

0 commit comments

Comments
 (0)