diff --git a/src/jsx.erl b/src/jsx.erl index 58ada1b..5d591d0 100644 --- a/src/jsx.erl +++ b/src/jsx.erl @@ -248,33 +248,11 @@ incremental_decode_loop({jsx, incomplete, Next}, <>, Ac incremental_decode_loop({jsx, end_json, _Next}, _Rest, Acc) -> lists:reverse([end_json] ++ Acc); incremental_decode_loop({jsx, Event, Next}, Rest, Acc) -> - incremental_decode_loop(Next(), Rest, [Event] ++ Acc). + incremental_decode_loop(Next(), Rest, [Event] ++ Acc); +incremental_decode_loop({error, {badjson, _Error}}, _Rest, _Acc) -> + {error, badjson}. -bad_escapes_test_() -> - [ - {"null byte", - ?_assertEqual({error, badjson}, decode(<<"\"\\u0000\"">>, [])) - }, - {"escaped noncharacter", - ?_assertEqual({error, badjson}, decode(<<"\"\\ud83f\\udfff\"">>, [])) - }, - {"noncharacter", - ?_assertEqual({error, badjson}, decode(<<"\"\\uffff\"">>, [])) - }, - {"more noncharacters", - ?_assertEqual({error, badjson}, decode(<<"\"\\ufdd0\"">>, [])) - }, - {"last noncharacter", - ?_assertEqual({error, badjson}, decode(<<"\"\\ufdef\"">>, [])) - }, - {"ok character", - ?_assertEqual([{string, <<239, 183, 176>>}, end_json], - decode(<<"\"\\ufdf0\"">>, []) - ) - } - ]. - multi_decode_test_() -> [ diff --git a/test/cases/deep_array.test b/test/cases/deep_array.test index 1933fac..35ef9b9 100644 --- a/test/cases/deep_array.test +++ b/test/cases/deep_array.test @@ -1,3 +1,3 @@ -{name, "deep_array"}. +{name, "deep array"}. {jsx, [start_array,start_array,start_array,end_array,end_array,end_array,end_json]}. {json, "deep_array.json"}. diff --git a/test/cases/escaped_noncharacter.json b/test/cases/escaped_noncharacter.json new file mode 100644 index 0000000..e5c1b65 --- /dev/null +++ b/test/cases/escaped_noncharacter.json @@ -0,0 +1 @@ +"\uffff" \ No newline at end of file diff --git a/test/cases/escaped_noncharacter.test b/test/cases/escaped_noncharacter.test new file mode 100644 index 0000000..4e20bc3 --- /dev/null +++ b/test/cases/escaped_noncharacter.test @@ -0,0 +1,3 @@ +{name, "escaped noncharacter"}. +{jsx, {error, badjson}}. +{json, "escaped_noncharacter.json"}. \ No newline at end of file diff --git a/test/cases/escaped_noncharacter_ext.json b/test/cases/escaped_noncharacter_ext.json new file mode 100644 index 0000000..f10ec2b --- /dev/null +++ b/test/cases/escaped_noncharacter_ext.json @@ -0,0 +1 @@ +"\ud83f\udfff" \ No newline at end of file diff --git a/test/cases/escaped_noncharacter_ext.test b/test/cases/escaped_noncharacter_ext.test new file mode 100644 index 0000000..7049148 --- /dev/null +++ b/test/cases/escaped_noncharacter_ext.test @@ -0,0 +1,3 @@ +{name, "escaped noncharacter (extended)"}. +{jsx, {error, badjson}}. +{json, "escaped_noncharacter_ext.json"}. \ No newline at end of file diff --git a/test/cases/escaped_reserved_a.json b/test/cases/escaped_reserved_a.json new file mode 100644 index 0000000..dab850b --- /dev/null +++ b/test/cases/escaped_reserved_a.json @@ -0,0 +1 @@ +"\ufdd0" \ No newline at end of file diff --git a/test/cases/escaped_reserved_a.test b/test/cases/escaped_reserved_a.test new file mode 100644 index 0000000..8a5cba2 --- /dev/null +++ b/test/cases/escaped_reserved_a.test @@ -0,0 +1,3 @@ +{name, "escaped reserved a"}. +{jsx, {error, badjson}}. +{json, "escaped_reserved_a.json"}. \ No newline at end of file diff --git a/test/cases/escaped_reserved_b.json b/test/cases/escaped_reserved_b.json new file mode 100644 index 0000000..be11b6e --- /dev/null +++ b/test/cases/escaped_reserved_b.json @@ -0,0 +1 @@ +"\ufdef" \ No newline at end of file diff --git a/test/cases/escaped_reserved_b.test b/test/cases/escaped_reserved_b.test new file mode 100644 index 0000000..414f024 --- /dev/null +++ b/test/cases/escaped_reserved_b.test @@ -0,0 +1,3 @@ +{name, "escaped reserved b"}. +{jsx, {error, badjson}}. +{json, "escaped_reserved_b.json"}. \ No newline at end of file diff --git a/test/cases/nullbyte_forbidden.json b/test/cases/nullbyte_forbidden.json new file mode 100644 index 0000000..ed6780d --- /dev/null +++ b/test/cases/nullbyte_forbidden.json @@ -0,0 +1 @@ +"\u0000" \ No newline at end of file diff --git a/test/cases/nullbyte_forbidden.test b/test/cases/nullbyte_forbidden.test new file mode 100644 index 0000000..2feb2f2 --- /dev/null +++ b/test/cases/nullbyte_forbidden.test @@ -0,0 +1,3 @@ +{name, "nullbyte forbidden"}. +{jsx, {error, badjson}}. +{json, "nullbyte_forbidden.json"}. \ No newline at end of file diff --git a/test/cases/unbalanced_array.json b/test/cases/unbalanced_array.json new file mode 100644 index 0000000..7f3fb61 --- /dev/null +++ b/test/cases/unbalanced_array.json @@ -0,0 +1 @@ +[[[[]]] \ No newline at end of file diff --git a/test/cases/unbalanced_array.test b/test/cases/unbalanced_array.test new file mode 100644 index 0000000..c271c0d --- /dev/null +++ b/test/cases/unbalanced_array.test @@ -0,0 +1,3 @@ +{name, "unbalanced array"}. +{jsx, {error, badjson}}. +{json, "unbalanced_array.json"}.