From 5f6d7c1f01dedef46ef6f37f759fb6873a988e76 Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Thu, 29 Mar 2012 00:18:53 -0700 Subject: [PATCH] upon further consideration, ignoring bad \uuXXXX escape sequences could be dangerous, remove test --- src/jsx_decoder.erl | 6 ++---- src/jsx_opts.hrl | 3 ++- src/jsx_utils.erl | 5 ++++- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/jsx_decoder.erl b/src/jsx_decoder.erl index 7015ac2..a380022 100644 --- a/src/jsx_decoder.erl +++ b/src/jsx_decoder.erl @@ -594,6 +594,8 @@ escape(<<$u, Rest/binary>>, Handler, Stack, Opts) -> escaped_unicode(Rest, Handler, Stack, Opts); escape(<<>>, Handler, Stack, Opts) -> ?incomplete(escape, <<>>, Handler, Stack, Opts); +escape(Bin, Handler, [Acc|Stack], Opts=#opts{ignore_bad_escapes=true}) -> + string(Bin, Handler, [?acc_seq(Acc, ?rsolidus)|Stack], Opts); escape(Bin, Handler, Stack, Opts) -> ?error([Bin, Handler, Stack, Opts]). @@ -1247,10 +1249,6 @@ ignore_bad_escapes_test_() -> {"ignore unrecognized escape sequence", ?_assertEqual( decode(<<"[\"\\x25\"]">>, [ignore_bad_escapes]), [start_array, {string, <<"\\x25">>}, end_array, end_json] - )}, - {"ignore invalid \\uXXXX escape sequence", ?_assertEqual( - decode(<<"[\"\\uFFFF\"]">>, [ignore_bad_escapes]), - [start_array, {string, <<"\\uFFFF">>}, end_array, end_json] )} ]. diff --git a/src/jsx_opts.hrl b/src/jsx_opts.hrl index 942ae14..3db2dcb 100644 --- a/src/jsx_opts.hrl +++ b/src/jsx_opts.hrl @@ -6,5 +6,6 @@ no_jsonp_escapes = false, comments = false, json_escape = false, - dirty_strings = false + dirty_strings = false, + ignore_bad_escapes = false }). \ No newline at end of file diff --git a/src/jsx_utils.erl b/src/jsx_utils.erl index 479187f..71024d8 100644 --- a/src/jsx_utils.erl +++ b/src/jsx_utils.erl @@ -53,6 +53,8 @@ parse_opts([json_escape|Rest], Opts) -> parse_opts(Rest, Opts#opts{json_escape=true}); parse_opts([dirty_strings|Rest], Opts) -> parse_opts(Rest, Opts#opts{json_escape=true}); +parse_opts([ignore_bad_escapes|Rest], Opts) -> + parse_opts(Rest, Opts#opts{ignore_bad_escapes=true}); parse_opts(_, _) -> {error, badarg}. @@ -66,7 +68,8 @@ valid_flags() -> no_jsonp_escapes, comments, json_escape, - dirty_strings + dirty_strings, + ignore_bad_escapes ].