noncharacter tests

This commit is contained in:
alisdair sullivan 2011-07-26 19:46:31 -07:00
parent c5c98482fc
commit 2720b2e0fb
2 changed files with 18 additions and 4 deletions

View file

@ -174,10 +174,10 @@ jsx_decoder_gen([Test|_] = Tests, [Encoding|Encodings]) ->
Flags = proplists:get_value(jsx_flags, Test, []),
{generator,
fun() ->
[{Name, ?_assert(decode(JSON, Flags) =:= JSX)}
[{Name, ?_assertEqual(decode(JSON, Flags), JSX)}
| {generator,
fun() -> [{Name ++ " incremental", ?_assert(
incremental_decode(JSON, Flags) =:= JSX)
fun() -> [{Name ++ " incremental", ?_assertEqual(
incremental_decode(JSON, Flags), JSX)
} | jsx_decoder_gen(Tests, Encodings)]
end
}
@ -258,6 +258,20 @@ bad_escapes_test_() ->
},
{"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\"">>, [])
)
}
].

View file

@ -466,7 +466,7 @@ escaped_unicode(<<D/?utfx, Rest/binary>>, Stack, Opts, String, [C, B, A])
X when X >= 16#d800, X =< 16#dbff ->
low_surrogate(Rest, Stack, Opts, String, X)
%% non-characters, you're not allowed to exchange these
; X when X == 16#fffe; X == 16#ffff ->
; X when X == 16#fffe; X == 16#ffff; X >= 16#fdd0, X =< 16#fdef ->
{error, {badjson, <<D/?utfx, Rest/binary>>}}
%% allowing interchange of null bytes allows attackers to forge
%% malicious streams