From 6abc120279ced47d899cd8596e4d48fc2171e2cf Mon Sep 17 00:00:00 2001 From: Vincent de Phily Date: Fri, 9 Jul 2010 13:29:47 +0200 Subject: [PATCH] erlang: Fix incomplete/invalid cases of unpack_/1 * fix list of invalid bytes was missing 3 possibilities (see type chart section of msgpack format spec) * fix matching of invalid bytes to look at 1 byte instead of 2 * simplify 'incomplete' case : anything that's not complete or invalid is by definition incomplete --- erlang/msgpack.erl | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/erlang/msgpack.erl b/erlang/msgpack.erl index d1ba9cd0..1c1eae91 100644 --- a/erlang/msgpack.erl +++ b/erlang/msgpack.erl @@ -236,24 +236,15 @@ unpack_(Bin) -> <<2#1001:4, L:4, Rest/binary>> -> unpack_array_(Rest, L, []); % array <<2#1000:4, L:4, Rest/binary>> -> unpack_map_(Rest, L, []); % map -% Incomplete / invalid data - <> when F==16#CA; F==16#CB; F==16#CC; - F==16#CD; F==16#CE; F==16#CF; - F==16#D0; F==16#D1; F==16#D2; - F==16#D3; F==16#DA; F==16#DB; - F==16#DC; F==16#DD; F==16#DE; - F==16#DF -> - throw(short); - <> when F==16#C1; - F==16#C7; F==16#C8; F==16#C9; - F==16#D5; F==16#D6; F==16#D7; - F==16#D8; F==16#D9 -> +% Invalid data + <> when F==16#C1; + F==16#C4; F==16#C5; F==16#C6; F==16#C7; F==16#C8; F==16#C9; + F==16#D4; F==16#D5; F==16#D6; F==16#D7; F==16#D8; F==16#D9 -> throw(badarg); +% Incomplete data (we've covered every complete/invalid case; anything left is incomplete) _ -> - throw(short) % or unknown/badarg? - end; -unpack_(<<>>)-> throw(short); -unpack_(<<2#101:3, _/binary>>) -> throw(short). + throw(short) + end. % ===== test codes ===== % -include_lib("eunit/include/eunit.hrl").