diff --git a/src/jsx_decoder.erl b/src/jsx_decoder.erl index 6e90a8a..c463693 100644 --- a/src/jsx_decoder.erl +++ b/src/jsx_decoder.erl @@ -170,7 +170,7 @@ start(Bin, Handler, Stack, Config) -> value(<>, Handler, Stack, Config) -> string(Rest, Handler, new_seq(), Stack, Config); -value(<>, Handler, Stack, Config = #config{single_quoted_strings=true}) -> +value(<>, Handler, Stack, Config=#config{single_quoted_strings=true}) -> string(Rest, Handler, new_seq(), [single_quote|Stack], Config); value(<<$t, Rest/binary>>, Handler, Stack, Config) -> true(Rest, Handler, Stack, Config); @@ -200,7 +200,7 @@ value(Bin, Handler, Stack, Config) -> object(<>, Handler, Stack, Config) -> string(Rest, Handler, new_seq(), Stack, Config); -object(<>, Handler, Stack, Config = #config{single_quoted_strings=true}) -> +object(<>, Handler, Stack, Config=#config{single_quoted_strings=true}) -> string(Rest, Handler, new_seq(), [single_quote|Stack], Config); object(<>, Handler, [key|Stack], Config) -> maybe_done(Rest, handle_event(end_object, Handler, Config), Stack, Config); @@ -240,7 +240,7 @@ colon(Bin, Handler, Stack, Config) -> key(<>, Handler, Stack, Config) -> string(Rest, Handler, new_seq(), Stack, Config); -key(<>, Handler, Stack, Config = #config{single_quoted_strings=true}) -> +key(<>, Handler, Stack, Config=#config{single_quoted_strings=true}) -> string(Rest, Handler, new_seq(), [single_quote|Stack], Config); key(<>, Handler, Stack, Config) when ?is_whitespace(S) -> key(Rest, Handler, Stack, Config); @@ -505,30 +505,30 @@ string(<>, Handler, Acc, Stack, Config) when X >= 16#f0000, string(<>, Handler, Acc, Stack, Config) when X >= 16#100000, X < 16#10fffe -> string(Rest, Handler, acc_seq(Acc, X), Stack, Config); %% surrogates -string(<<237, X, _, Rest/binary>>, Handler, Acc, Stack, #config{replaced_bad_utf8=true} = Config) +string(<<237, X, _, Rest/binary>>, Handler, Acc, Stack, Config=#config{replaced_bad_utf8=true}) when X >= 160 -> string(Rest, Handler, acc_seq(Acc, 16#fffd), Stack, Config); %% u+fffe and u+ffff for R14BXX -string(<<239, 191, X, Rest/binary>>, Handler, Acc, Stack, #config{replaced_bad_utf8=true} = Config) +string(<<239, 191, X, Rest/binary>>, Handler, Acc, Stack, Config=#config{replaced_bad_utf8=true}) when X == 190; X == 191 -> string(Rest, Handler, acc_seq(Acc, 16#fffd), Stack, Config); %% u+xfffe, u+xffff, control codes and other noncharacters -string(<<_/utf8, Rest/binary>>, Handler, Acc, Stack, #config{replaced_bad_utf8=true} = Config) -> +string(<<_/utf8, Rest/binary>>, Handler, Acc, Stack, Config=#config{replaced_bad_utf8=true}) -> string(Rest, Handler, acc_seq(Acc, 16#fffd), Stack, Config); %% overlong encodings and missing continuations of a 2 byte sequence -string(<>, Handler, Acc, Stack, #config{replaced_bad_utf8=true} = Config) +string(<>, Handler, Acc, Stack, Config=#config{replaced_bad_utf8=true}) when X >= 192, X =< 223 -> strip_continuations(Rest, Handler, Acc, Stack, Config, 1); %% overlong encodings and missing continuations of a 3 byte sequence -string(<>, Handler, Acc, Stack, #config{replaced_bad_utf8=true} = Config) +string(<>, Handler, Acc, Stack, Config=#config{replaced_bad_utf8=true}) when X >= 224, X =< 239 -> strip_continuations(Rest, Handler, Acc, Stack, Config, 2); %% overlong encodings and missing continuations of a 4 byte sequence -string(<>, Handler, Acc, Stack, #config{replaced_bad_utf8=true} = Config) +string(<>, Handler, Acc, Stack, Config=#config{replaced_bad_utf8=true}) when X >= 240, X =< 247 -> strip_continuations(Rest, Handler, Acc, Stack, Config, 3); %% incompletes and unexpected bytes, including orphan continuations -string(<<_, Rest/binary>>, Handler, Acc, Stack, #config{replaced_bad_utf8=true} = Config) -> +string(<<_, Rest/binary>>, Handler, Acc, Stack, Config=#config{replaced_bad_utf8=true}) -> string(Rest, Handler, acc_seq(Acc, 16#fffd), Stack, Config); string(Bin, Handler, Acc, Stack, Config) -> case partial_utf(Bin) of @@ -906,7 +906,7 @@ done(<>, Handler, [], Config) when ?is_whitespace(S) -> done(Rest, Handler, [], Config); done(<>, Handler, [], Config=#config{comments=true}) -> comment(Rest, Handler, [done], Config); -done(<<>>, {Handler, State}, [], Config = #config{explicit_end=true}) -> +done(<<>>, {Handler, State}, [], Config=#config{explicit_end=true}) -> {incomplete, fun(Stream) when is_binary(Stream) -> done(<>, {Handler, State}, [], Config) ; (end_stream) -> State