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 | 521353bf77db6d470cfc50514a8241e1243e8c74 (patch) | |
tree | 5dd24d5519f85c48ddd78fe1d50d8b9bf1adeb6b | |
parent | 8c81b7655fe767a6182e4abc6ae5c234f0f2fcd9 (diff) | |
download | rabbitmq-server-bug25860.tar.gz |
Use xmerl rather than maintain our own UTF-8 validator.bug25860
-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. |