From d081bd2539b51b7c7ffafe84e3ffdd55ec3dc692 Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Thu, 24 May 2012 23:07:03 -0700 Subject: [PATCH] change all stray badjson to badarg --- priv/test_cases/bad_low_surrogate.test | 2 +- priv/test_cases/bad_naked_number.test | 2 +- priv/test_cases/unbalanced_array.test | 2 +- priv/test_cases/unpaired_surrogate.test | 2 +- src/jsx.erl | 6 ++-- src/jsx_decoder.erl | 14 +++++----- src/jsx_encoder.erl | 15 +++++----- src/jsx_parser.erl | 37 +++++++++++++++++++------ 8 files changed, 51 insertions(+), 29 deletions(-) diff --git a/priv/test_cases/bad_low_surrogate.test b/priv/test_cases/bad_low_surrogate.test index 9f36e55..7d85b62 100644 --- a/priv/test_cases/bad_low_surrogate.test +++ b/priv/test_cases/bad_low_surrogate.test @@ -1,3 +1,3 @@ {name, "bad_low_surrogate"}. -{jsx, {error, badjson}}. +{jsx, {error, badarg}}. {json, "bad_low_surrogate.json"}. diff --git a/priv/test_cases/bad_naked_number.test b/priv/test_cases/bad_naked_number.test index 2781ebb..b620a6e 100644 --- a/priv/test_cases/bad_naked_number.test +++ b/priv/test_cases/bad_naked_number.test @@ -1,3 +1,3 @@ {name, "bad naked number"}. -{jsx, {error, badjson}}. +{jsx, {error, badarg}}. {json, "bad_naked_number.json"}. diff --git a/priv/test_cases/unbalanced_array.test b/priv/test_cases/unbalanced_array.test index c271c0d..41a2a5e 100644 --- a/priv/test_cases/unbalanced_array.test +++ b/priv/test_cases/unbalanced_array.test @@ -1,3 +1,3 @@ {name, "unbalanced array"}. -{jsx, {error, badjson}}. +{jsx, {error, badarg}}. {json, "unbalanced_array.json"}. diff --git a/priv/test_cases/unpaired_surrogate.test b/priv/test_cases/unpaired_surrogate.test index e2da5c1..972a34e 100644 --- a/priv/test_cases/unpaired_surrogate.test +++ b/priv/test_cases/unpaired_surrogate.test @@ -1,3 +1,3 @@ {name, "unpaired_surrogate"}. -{jsx, {error, badjson}}. +{jsx, {error, badarg}}. {json, "unpaired_surrogate.json"}. diff --git a/src/jsx.erl b/src/jsx.erl index 56d3e3f..cb389d8 100644 --- a/src/jsx.erl +++ b/src/jsx.erl @@ -290,20 +290,20 @@ test_decode(JSON, Flags) -> case (jsx_decoder:decoder(?MODULE, [], Flags))(JSON) of {incomplete, More} -> case More(<<" ">>) of - {incomplete, _} -> {error, badjson} + {incomplete, _} -> {error, badarg} ; Events -> Events end ; Events -> Events end catch - error:badarg -> {error, badjson} + error:badarg -> {error, badarg} end. incremental_decode(<>, Flags) -> P = jsx_decoder:decoder(?MODULE, [], Flags ++ [explicit_end]), try incremental_decode_loop(P(C), Rest) - catch error:badarg -> {error, badjson} + catch error:badarg -> {error, badarg} end. incremental_decode_loop({incomplete, More}, <<>>) -> diff --git a/src/jsx_decoder.erl b/src/jsx_decoder.erl index 5e72394..e42cff7 100644 --- a/src/jsx_decoder.erl +++ b/src/jsx_decoder.erl @@ -1245,7 +1245,7 @@ decode(JSON, Opts) -> try (decoder(jsx, [], Opts))(JSON) catch - error:badarg -> {error, badjson} + error:badarg -> {error, badarg} end. @@ -1482,7 +1482,7 @@ escapes_test_() -> noncharacters_test_() -> [ - {"noncharacters - badjson", + {"noncharacters - badarg", ?_assert(check_bad(noncharacters())) }, {"noncharacters - replaced", @@ -1493,7 +1493,7 @@ noncharacters_test_() -> extended_noncharacters_test_() -> [ - {"extended noncharacters - badjson", + {"extended noncharacters - badarg", ?_assert(check_bad(extended_noncharacters())) }, {"extended noncharacters - replaced", @@ -1504,7 +1504,7 @@ extended_noncharacters_test_() -> surrogates_test_() -> [ - {"surrogates - badjson", + {"surrogates - badarg", ?_assert(check_bad(surrogates())) }, {"surrogates - replaced", @@ -1515,7 +1515,7 @@ surrogates_test_() -> control_test_() -> [ - {"control characters - badjson", + {"control characters - badarg", ?_assert(check_bad(control_characters())) } ]. @@ -1523,7 +1523,7 @@ control_test_() -> reserved_test_() -> [ - {"reserved noncharacters - badjson", + {"reserved noncharacters - badarg", ?_assert(check_bad(reserved_space())) }, {"reserved noncharacters - replaced", @@ -1553,7 +1553,7 @@ good_characters_test_() -> check_bad(List) -> - [] == lists:dropwhile(fun({_, {error, badjson}}) -> true ; (_) -> false end, + [] == lists:dropwhile(fun({_, {error, badarg}}) -> true ; (_) -> false end, check(List, [], []) ). diff --git a/src/jsx_encoder.erl b/src/jsx_encoder.erl index 3b52f67..67e2642 100644 --- a/src/jsx_encoder.erl +++ b/src/jsx_encoder.erl @@ -495,7 +495,8 @@ maybe_replace(X, #opts{escaped_strings=true}) when X < 32 -> lists:reverse(jsx_utils:json_escape_sequence(X)); maybe_replace(noncharacter, #opts{replaced_bad_utf8=true}) -> [16#fffd]; maybe_replace(surrogate, #opts{replaced_bad_utf8=true}) -> [16#fffd]; -maybe_replace(badutf, #opts{replaced_bad_utf8=true}) -> [16#fffd]. +maybe_replace(badutf, #opts{replaced_bad_utf8=true}) -> [16#fffd]; +maybe_replace(_, _) -> erlang:error(badarg). -ifdef(TEST). @@ -707,7 +708,7 @@ encode(Term) -> encode(Term, []). encode(Term, Opts) -> try (encoder(jsx, [], Opts))(Term) - catch _:_ -> {error, badjson} + catch _:_ -> {error, badarg} end. @@ -903,7 +904,7 @@ escapes_test_() -> surrogates_test_() -> [ - {"surrogates - badjson", + {"surrogates - badarg", ?_assert(check_bad(surrogates())) }, {"surrogates - replaced", @@ -940,7 +941,7 @@ good_characters_test_() -> reserved_test_() -> [ - {"reserved noncharacters - badjson", + {"reserved noncharacters - badarg", ?_assert(check_bad(reserved_space())) }, {"reserved noncharacters - replaced", @@ -951,7 +952,7 @@ reserved_test_() -> noncharacters_test_() -> [ - {"noncharacters - badjson", + {"noncharacters - badarg", ?_assert(check_bad(noncharacters())) }, {"noncharacters - replaced", @@ -962,7 +963,7 @@ noncharacters_test_() -> extended_noncharacters_test_() -> [ - {"extended noncharacters - badjson", + {"extended noncharacters - badarg", ?_assert(check_bad(extended_noncharacters())) }, {"extended noncharacters - replaced", @@ -972,7 +973,7 @@ extended_noncharacters_test_() -> check_bad(List) -> - [] == lists:dropwhile(fun({_, {error, badjson}}) -> true ; (_) -> false end, + [] == lists:dropwhile(fun({_, {error, badarg}}) -> true ; (_) -> false end, check(List, [], []) ). diff --git a/src/jsx_parser.erl b/src/jsx_parser.erl index af549e5..eef70c1 100644 --- a/src/jsx_parser.erl +++ b/src/jsx_parser.erl @@ -549,7 +549,8 @@ maybe_replace(X, #opts{escaped_strings=true}) when X < 32 -> lists:reverse(jsx_utils:json_escape_sequence(X)); maybe_replace(noncharacter, #opts{replaced_bad_utf8=true}) -> [16#fffd]; maybe_replace(surrogate, #opts{replaced_bad_utf8=true}) -> [16#fffd]; -maybe_replace(badutf, #opts{replaced_bad_utf8=true}) -> [16#fffd]. +maybe_replace(badutf, #opts{replaced_bad_utf8=true}) -> [16#fffd]; +maybe_replace(_, _) -> erlang:error(badarg). -ifdef(TEST). @@ -573,9 +574,9 @@ incomplete_test_() -> encode(Term) -> encode(Term, []). -encode(Term, Opts) -> +encode(Term, Opts) -> try (parser(jsx, [], Opts))(Term) - catch _:_ -> {error, badjson} + catch error:badarg -> {error, badarg} end. @@ -707,6 +708,26 @@ encode_test_() -> )} ]. +encode_failures_test_() -> + [ + {"unwrapped values", ?_assertEqual( + {error, badarg}, + encode([{string, <<"a string\n">>}, {string, <<"a string\n">>}, end_json]) + )}, + {"unbalanced array", ?_assertEqual( + {error, badarg}, + encode([start_array, end_array, end_array, end_json]) + )}, + {"premature finish", ?_assertEqual( + {error, badarg}, + encode([start_object, {key, <<"key">>, start_array, end_json}]) + )}, + {"really premature finish", ?_assertEqual( + {error, badarg}, + encode([end_json]) + )} + ]. + xcode(Bin) -> xcode(Bin, #opts{}). @@ -938,7 +959,7 @@ escapes_test_() -> surrogates_test_() -> [ - {"surrogates - badjson", + {"surrogates - badarg", ?_assert(check_bad(surrogates())) }, {"surrogates - replaced", @@ -975,7 +996,7 @@ good_characters_test_() -> reserved_test_() -> [ - {"reserved noncharacters - badjson", + {"reserved noncharacters - badarg", ?_assert(check_bad(reserved_space())) }, {"reserved noncharacters - replaced", @@ -986,7 +1007,7 @@ reserved_test_() -> noncharacters_test_() -> [ - {"noncharacters - badjson", + {"noncharacters - badarg", ?_assert(check_bad(noncharacters())) }, {"noncharacters - replaced", @@ -997,7 +1018,7 @@ noncharacters_test_() -> extended_noncharacters_test_() -> [ - {"extended noncharacters - badjson", + {"extended noncharacters - badarg", ?_assert(check_bad(extended_noncharacters())) }, {"extended noncharacters - replaced", @@ -1007,7 +1028,7 @@ extended_noncharacters_test_() -> check_bad(List) -> - [] == lists:dropwhile(fun({_, {error, badjson}}) -> true ; (_) -> false end, + [] == lists:dropwhile(fun({_, {error, badarg}}) -> true ; (_) -> false end, check(List, [], []) ).