diff --git a/lib/encode.ex b/lib/encode.ex index fc3c738..1a9d7be 100644 --- a/lib/encode.ex +++ b/lib/encode.ex @@ -261,7 +261,7 @@ defmodule Jason.Encode do slash_escapes = Enum.zip('\b\t\n\f\r\"\\', 'btnfr"\\') surogate_escapes = Enum.zip([0x2028, 0x2029], ["\\u2028", "\\u2029"]) ranges = [{0x00..0x1F, :unicode} | slash_escapes] - html_ranges = [{0x00..0x1F, :unicode}, {?/, ?/} | slash_escapes] + html_ranges = [{0x00..0x1F, :unicode}, {?<, :unicode}, {?/, ?/} | slash_escapes] escape_jt = Codegen.jump_table(html_ranges, :error) Enum.each(escape_jt, fn diff --git a/test/encode_test.exs b/test/encode_test.exs index e4a0a74..ede61a6 100644 --- a/test/encode_test.exs +++ b/test/encode_test.exs @@ -30,8 +30,9 @@ defmodule Jason.EncoderTest do assert to_json("☃a", escape: :unicode_safe) == ~s("\\u2603a") assert to_json("𝄞b", escape: :unicode_safe) == ~s("\\uD834\\uDD1Eb") assert to_json("\u2028\u2029abc", escape: :javascript_safe) == ~s("\\u2028\\u2029abc") - assert to_json("", escape: :html_safe) == ~s("<\\/script>") - assert to_json(~s(), escape: :html_safe) == ~s("", escape: :html_safe) == ~s("\\u003C\\/script>") + assert to_json(~s(), escape: :html_safe) == ~s("\\u003Cscript>var s = \\\"\\u2028\\u2029\\\";\\u003C\\/script>") + assert to_json("