diff --git a/src/jsx_utils.erl b/src/jsx_utils.erl index 21f74d2..2c4526e 100644 --- a/src/jsx_utils.erl +++ b/src/jsx_utils.erl @@ -132,6 +132,8 @@ json_escape(<>, Opts, Acc) %% any other legal codepoint json_escape(<>, Opts, Acc) -> json_escape(Rest, Opts, <>); +json_escape(<<_, Rest/binary>>, Opts=#opts{loose_unicode=true}, Acc) -> + json_escape(Rest, Opts, <>); json_escape(<<>>, _Opts, Acc) -> Acc; json_escape(Rest, Opts, Acc) -> @@ -173,6 +175,12 @@ binary_escape_test_() -> <<"\\u0001\\u0002\\u0003\\u000b\\u001a\\u001e\\u001f">> ) }, + {"json string loose unicode escaping", + ?_assertEqual( + json_escape(<<16#ffff>>, #opts{loose_unicode=true}), + <<16#fffd/utf8>> + ) + }, {"jsonp protection", ?_assertEqual( json_escape(<<226, 128, 168, 226, 128, 169>>, #opts{}),