Skip to content

Commit af96087

Browse files
committed
Fix using UTF-8 characters with :html_safe escaping
Fixes #113.
1 parent 6b762ba commit af96087

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

lib/poison/encoder.ex

+4-4
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,6 @@ defimpl Poison.Encoder, for: BitString do
164164
["\\/" | escape(rest, :html_safe)]
165165
end
166166

167-
defp escape(<<char::utf8>> <> rest, :html_safe) do
168-
[char | escape(rest, :html_safe)]
169-
end
170-
171167
defp escape(string, mode) do
172168
size = chunk_size(string, mode, 0)
173169
<<chunk::binary-size(size), rest::binary>> = string
@@ -179,6 +175,10 @@ defimpl Poison.Encoder, for: BitString do
179175
acc
180176
end
181177

178+
defp chunk_size(<<?/::utf8>> <> _, :html_safe, acc) do
179+
acc
180+
end
181+
182182
defp chunk_size(<<char>> <> rest, mode, acc) when char < 0x80 do
183183
chunk_size(rest, mode, acc + 1)
184184
end

test/poison/encoder_test.exs

+3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ defmodule Poison.EncoderTest do
3232
assert to_json("\u2028\u2029", escape: :javascript) == ~s("\\u2028\\u2029")
3333
assert to_json("</script>", escape: :html_safe) == ~s("<\\/script>")
3434

35+
assert to_json("\uCCCC</script>\uCCCC", escape: :html_safe) ==
36+
~s("쳌<\\/script>쳌")
37+
3538
assert to_json(~s(<script>var s = "\u2028\u2029";</script>),
3639
escape: :html_safe
3740
) == ~s("<script>var s = \\\"\\u2028\\u2029\\\";<\\/script>")

0 commit comments

Comments
 (0)