apply escape_forward_slash option to decoding as well as encoding

This commit is contained in:
alisdair sullivan 2012-03-19 15:57:00 -07:00
parent e3c883457f
commit e36858d1ba
3 changed files with 18 additions and 7 deletions

View file

@ -1 +1 @@
["\"", "\\", "\/", "\b", "\f", "\n", "\r", "\t"]
["\"", "\\", "\b", "\f", "\n", "\r", "\t"]

View file

@ -2,7 +2,6 @@
{jsx, [start_array,
{string,<<"\"">>},
{string,<<"\\">>},
{string,<<"/">>},
{string,<<"\b">>},
{string,<<"\f">>},
{string,<<"\n">>},

View file

@ -348,13 +348,16 @@ escape(<<$r, Rest/binary>>, Handler, [Acc|Stack], Opts) ->
string(Rest, Handler, [?acc_seq(Acc, $\r)|Stack], Opts);
escape(<<$t, Rest/binary>>, Handler, [Acc|Stack], Opts) ->
string(Rest, Handler, [?acc_seq(Acc, $\t)|Stack], Opts);
escape(<<$u, Rest/binary>>, Handler, Stack, Opts) ->
escaped_unicode(Rest, Handler, [?new_seq()|Stack], Opts);
escape(<<S, Rest/binary>>, Handler, [Acc|Stack], Opts)
when S =:= ?doublequote; S =:= ?solidus; S =:= ?rsolidus ->
string(Rest, Handler, [?acc_seq(Acc, S)|Stack], Opts);
escape(<<?rsolidus, Rest/binary>>, Handler, [Acc|Stack], Opts) ->
string(Rest, Handler, [?acc_seq(Acc, $\\)|Stack], Opts);
escape(<<?solidus, Rest/binary>>, Handler, [Acc|Stack], Opts=#opts{escape_forward_slash=true}) ->
string(Rest, Handler, [?acc_seq(Acc, $/)|Stack], Opts);
escape(<<?doublequote, Rest/binary>>, Handler, [Acc|Stack], Opts) ->
string(Rest, Handler, [?acc_seq(Acc, $\")|Stack], Opts);
escape(<<?singlequote, Rest/binary>>, Handler, [Acc|Stack], Opts = #opts{single_quotes=true}) ->
string(Rest, Handler, [?acc_seq(Acc, ?singlequote)|Stack], Opts);
escape(<<$u, Rest/binary>>, Handler, Stack, Opts) ->
escaped_unicode(Rest, Handler, [?new_seq()|Stack], Opts);
escape(<<>>, Handler, Stack, Opts) ->
?incomplete(escape, <<>>, Handler, Stack, Opts);
escape(Bin, Handler, Stack, Opts) ->
@ -1011,6 +1014,15 @@ comments_test_() ->
].
escape_forward_slash_test_() ->
[
{"escape forward slash test", ?_assertEqual(
decode(<<"[ \" \/ \" ]">>, [escape_forward_slash]),
[start_array, {string, <<" / ">>}, end_array, end_json]
)}
].
noncharacters_test_() ->
[
{"noncharacters - badjson",