diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2013-11-12 10:02:04 +0000 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2013-11-12 10:02:04 +0000 |
| commit | e95bab1372a58ca24b231f9abdfac253bf0686c4 (patch) | |
| tree | 5dd24d5519f85c48ddd78fe1d50d8b9bf1adeb6b | |
| parent | 2307326ceeaeb2bdf9e7762b40ba11ca2d8d6a15 (diff) | |
| download | rabbitmq-server-git-e95bab1372a58ca24b231f9abdfac253bf0686c4.tar.gz | |
Use xmerl rather than maintain our own UTF-8 validator.
| -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 fbd2da4a2b..088ad0e52e 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. |
