Skip to content

Commit b7dcd0e

Browse files
committed
Add tests on string validation
1 parent 448a41e commit b7dcd0e

3 files changed

Lines changed: 20 additions & 6 deletions

File tree

src/msgpack.erl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,12 +159,13 @@ parse_options([{known_atoms, Atoms}|T], Opt0) when is_list(Atoms) ->
159159
parse_options(T, Opt0?OPTION{known_atoms=Atoms});
160160

161161
parse_options([{unpack_str, As}|T], Opt0) when As =:= as_binary orelse As =:= as_list ->
162-
%% TODO Choose function here
163162
parse_options(T, Opt0?OPTION{unpack_str=As});
164163

164+
parse_options([{validate_string, Bool}|T], Opt) when is_boolean(Bool) ->
165+
parse_options(T, Opt?OPTION{validate_string=Bool});
166+
165167
parse_options([{pack_str, From}|T], Opt)
166168
when From =:= from_binary orelse From =:= from_list orelse From =:= none ->
167-
%% TODO Choose function here
168169
parse_options(T, Opt?OPTION{pack_str=From});
169170

170171
parse_options([{map_format,Type}|T], Opt0)

src/msgpack_unpacker.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,8 @@ maybe_bin(Bin, _) ->
230230
%% NOTE: msgpack DOES validate the binary as valid unicode string.
231231
unpack_str(Binary) ->
232232
case unicode:characters_to_list(Binary) of
233-
{error, _S, _Rest} -> throw({error, {invalid_string, Binary}});
234-
{incomplete, _S, _Rest} -> throw({error, {invalid_string, Binary}});
233+
{error, _S, _Rest} -> throw({invalid_string, Binary});
234+
{incomplete, _S, _Rest} -> throw({invalid_string, Binary});
235235
String -> String
236236
end.
237237

test/msgpack_tests.erl

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -607,8 +607,21 @@ new_spec_unpack_test_() ->
607607
]}].
608608

609609
unpack_str_validation_test_() ->
610+
String = unicode:characters_to_binary("あいうえおかきくけこさしすせそ" "abcdefghijklmnopqrstuv"),
611+
InvalidStr = <<255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255>>,
612+
WrongPack = <<16#D9, 16, InvalidStr/binary>>,
613+
Packed = msgpack:pack(String, [{spec,new},{pack_str,from_binary}]),
614+
NoValidation = [{spec,new},{unpack_str,as_binary},{validate_string,false}],
615+
DoValidation = [{spec,new},{unpack_str,as_binary},{validate_string,true}],
610616
[{"validate_string false, on unpacking",
611-
[]},
617+
[?_assertEqual({ok, String}, msgpack:unpack(Packed, NoValidation)),
618+
?_assertEqual({ok, InvalidStr}, msgpack:unpack(WrongPack, NoValidation))]},
612619
{"validate_string true, on unpacking",
613-
[]}
620+
[?_assertEqual({ok, String}, msgpack:unpack(Packed, DoValidation)),
621+
?_assertEqual({error, {invalid_string, InvalidStr}}, msgpack:unpack(WrongPack, DoValidation)),
622+
623+
%% TODO: this should be invalid string
624+
?_assertEqual({error, {badarg, binary_to_list(InvalidStr)}},
625+
msgpack:unpack(binary_to_list(InvalidStr),
626+
[{spec,new},{unpack_str,from_list},{validate_string,true}]))]}
614627
].

0 commit comments

Comments
 (0)