From 3137e46f35419cbdefc29a17d4b1c7eafc46f4b9 Mon Sep 17 00:00:00 2001 From: Brett Bethke Date: Thu, 23 Apr 2015 17:24:50 -0700 Subject: [PATCH] Allow unpacking str 8 types without {enable_str,true} set. --- src/msgpack_unpacker.erl | 4 ++++ test/msgpack_test.erl | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/src/msgpack_unpacker.erl b/src/msgpack_unpacker.erl index 181a2ab..801ab47 100644 --- a/src/msgpack_unpacker.erl +++ b/src/msgpack_unpacker.erl @@ -86,6 +86,10 @@ unpack_stream(<<16#D9, L:8/big-unsigned-integer-unit:1, V:L/binary, Rest/binary> ?OPTION{enable_str=true} = _Opt) -> {unpack_string(V), Rest}; +unpack_stream(<<16#D9, L:8/big-unsigned-integer-unit:1, V:L/binary, Rest/binary>>, + ?OPTION{enable_str=false} = Opt) -> + unpack_string_or_raw(V, Opt, Rest); + unpack_stream(<<16#DA, L:16/big-unsigned-integer-unit:1, V:L/binary, Rest/binary>>, Opt) -> unpack_string_or_raw(V, Opt, Rest); diff --git a/test/msgpack_test.erl b/test/msgpack_test.erl index 0466da2..7b31292 100644 --- a/test/msgpack_test.erl +++ b/test/msgpack_test.erl @@ -176,6 +176,15 @@ string_test() -> MsgpackStringBin = msgpack:pack(String), {ok, String} = msgpack:unpack(MsgpackStringBin). +string_length_encoding_test() -> + %% This test checks proper deserialization of strings that + %% have been encoded with all valid length encodings + {ok, <<42>>} = msgpack:unpack(<<2#10100001,42>>), + {ok, <<42>>} = msgpack:unpack(<<16#D9,1,42>>), + {ok, <<42>>} = msgpack:unpack(<<16#DA,0,1,42>>), + {ok, <<42>>} = msgpack:unpack(<<16#DB,0,0,0,1,42>>). + + default_test_() -> [ {"pack",