mirror of
https://github.com/haml/haml.git
synced 2022-11-09 12:33:31 -05:00
Attribute escaping respects html_safe.
It's sometimes the case where we don't want attributes to be html_escaped... for instance `%input{ placeholder: 'Filter…' }`. This commit changes the attribute escaping to respect the rails `html_safe` flag and not escape attributes when `.html_safe` is explicitly called on them. Closes #470
This commit is contained in:
parent
8769ac076e
commit
e4510a94b7
3 changed files with 14 additions and 1 deletions
|
@ -3,6 +3,11 @@
|
||||||
* Table of contents
|
* Table of contents
|
||||||
{:toc}
|
{:toc}
|
||||||
|
|
||||||
|
## 3.1.5 (Unreleased)
|
||||||
|
|
||||||
|
* Respect Rails' `html_safe` flag when escaping attribute values
|
||||||
|
(thanks to [Gerad Suyderhoud](https://github.com/gerad)).
|
||||||
|
|
||||||
## 3.1.4
|
## 3.1.4
|
||||||
|
|
||||||
* Fix the use of `FormBuilder#block` with a label in Haml.
|
* Fix the use of `FormBuilder#block` with a label in Haml.
|
||||||
|
|
|
@ -372,7 +372,7 @@ END
|
||||||
if escape_attrs == :once
|
if escape_attrs == :once
|
||||||
Haml::Helpers.escape_once(value.to_s)
|
Haml::Helpers.escape_once(value.to_s)
|
||||||
elsif escape_attrs
|
elsif escape_attrs
|
||||||
CGI.escapeHTML(value.to_s)
|
Haml::Helpers.html_escape(value.to_s)
|
||||||
else
|
else
|
||||||
value.to_s
|
value.to_s
|
||||||
end
|
end
|
||||||
|
|
|
@ -339,6 +339,14 @@ HAML
|
||||||
assert_equal("Foo & Bar\n", render('Foo #{"&"} Bar', :action_view))
|
assert_equal("Foo & Bar\n", render('Foo #{"&"} Bar', :action_view))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_xss_protection_in_attributes
|
||||||
|
assert_equal("<div data-html='<foo>bar</foo>'></div>\n", render('%div{ "data-html" => "<foo>bar</foo>" }', :action_view))
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_xss_protection_in_attributes_with_safe_strings
|
||||||
|
assert_equal("<div data-html='<foo>bar</foo>'></div>\n", render('%div{ "data-html" => "<foo>bar</foo>".html_safe }', :action_view))
|
||||||
|
end
|
||||||
|
|
||||||
def test_xss_protection_with_bang_in_interpolation
|
def test_xss_protection_with_bang_in_interpolation
|
||||||
assert_equal("Foo & Bar\n", render('! Foo #{"&"} Bar', :action_view))
|
assert_equal("Foo & Bar\n", render('! Foo #{"&"} Bar', :action_view))
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue