Browse Source

force_escape should work in iolists.

Fixes #70.
Andreas Stenius 11 years ago
parent
commit
ce362c2750
2 changed files with 8 additions and 0 deletions
  1. 2 0
      src/erlydtl_filters.erl
  2. 6 0
      tests/src/erlydtl_unittests.erl

+ 2 - 0
src/erlydtl_filters.erl

@@ -917,6 +917,8 @@ escape("\"" ++ Rest, Acc) ->
     escape(Rest, lists:reverse(""", Acc));
     escape(Rest, lists:reverse(""", Acc));
 escape("'" ++ Rest, Acc) ->
 escape("'" ++ Rest, Acc) ->
     escape(Rest, lists:reverse("'", Acc));
     escape(Rest, lists:reverse("'", Acc));
+escape([S | Rest], Acc) when is_list(S); is_binary(S)->
+    escape(Rest, [force_escape(S) | Acc]);
 escape([C | Rest], Acc) ->
 escape([C | Rest], Acc) ->
     escape(Rest, [C | Acc]).
     escape(Rest, [C | Acc]).
 
 

+ 6 - 0
tests/src/erlydtl_unittests.erl

@@ -480,6 +480,12 @@ tests() ->
 		  {"|force_escape",
 		  {"|force_escape",
 		   <<"{{ var1|force_escape }}">>, [{var1, "Ben & Jerry's <=> \"The World's Best Ice Cream\""}],
 		   <<"{{ var1|force_escape }}">>, [{var1, "Ben & Jerry's <=> \"The World's Best Ice Cream\""}],
 		   <<"Ben &amp; Jerry&#039;s &lt;=&gt; &quot;The World&#039;s Best Ice Cream&quot;">>},
 		   <<"Ben &amp; Jerry&#039;s &lt;=&gt; &quot;The World&#039;s Best Ice Cream&quot;">>},
+		  {"iolist |force_escape",
+		   <<"{{ var1|force_escape }}">>, [{var1, ["'a'"]}],
+		   <<"&#039;a&#039;">>},
+		  {"nested iolist |force_escape",
+		   <<"{{ var1|force_escape }}">>, [{var1, ["a'", <<"b">>, [<<"<c">>, "d", ["e>"]]]}],
+		   <<"a&#039;b&lt;cde&gt;">>},
 		  {"|format_integer",
 		  {"|format_integer",
 		   <<"{{ var1|format_integer }}">>, [{var1, 28}], <<"28">>},
 		   <<"{{ var1|format_integer }}">>, [{var1, 28}], <<"28">>},
 		  {"|format_number 1",
 		  {"|format_number 1",