diff options
Diffstat (limited to 'src/rabbit_binary_parser.erl')
-rw-r--r-- | src/rabbit_binary_parser.erl | 37 |
1 files changed, 7 insertions, 30 deletions
diff --git a/src/rabbit_binary_parser.erl b/src/rabbit_binary_parser.erl index fbd2da4a..088ad0e5 100644 --- a/src/rabbit_binary_parser.erl +++ b/src/rabbit_binary_parser.erl @@ -110,33 +110,10 @@ assert_utf8(B) -> frame_error, "Malformed UTF-8 in shortstr", []) end. -validate_utf8(<<C, Cs/binary>>) when C < 16#80 -> - %% Plain Ascii character. - validate_utf8(Cs); -validate_utf8(<<C1, C2, Cs/binary>>) when C1 band 16#E0 =:= 16#C0, - C2 band 16#C0 =:= 16#80 -> - case ((C1 band 16#1F) bsl 6) bor (C2 band 16#3F) of - C when 16#80 =< C -> validate_utf8(Cs); - _ -> error - end; -validate_utf8(<<C1, C2, C3, Cs/binary>>) when C1 band 16#F0 =:= 16#E0, - C2 band 16#C0 =:= 16#80, - C3 band 16#C0 =:= 16#80 -> - case ((((C1 band 16#0F) bsl 6) bor (C2 band 16#3F)) bsl 6) bor - (C3 band 16#3F) of - C when 16#800 =< C -> validate_utf8(Cs); - _ -> error - end; -validate_utf8(<<C1, C2, C3, C4, Cs/binary>>) when C1 band 16#F8 =:= 16#F0, - C2 band 16#C0 =:= 16#80, - C3 band 16#C0 =:= 16#80, - C4 band 16#C0 =:= 16#80 -> - case ((((((C1 band 16#0F) bsl 6) bor (C2 band 16#3F)) bsl 6) bor - (C3 band 16#3F)) bsl 6) bor (C4 band 16#3F) of - C when 16#10000 =< C -> validate_utf8(Cs); - _ -> error - end; -validate_utf8(<<>>) -> - ok; -validate_utf8(_) -> - error. +validate_utf8(Bin) -> + try + xmerl_ucs:from_utf8(Bin), + ok + catch exit:{ucs, _} -> + error + end. |