summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2013-11-12 10:02:04 +0000
committerSimon MacMullen <simon@rabbitmq.com>2013-11-12 10:02:04 +0000
commit521353bf77db6d470cfc50514a8241e1243e8c74 (patch)
tree5dd24d5519f85c48ddd78fe1d50d8b9bf1adeb6b
parent8c81b7655fe767a6182e4abc6ae5c234f0f2fcd9 (diff)
downloadrabbitmq-server-bug25860.tar.gz
Use xmerl rather than maintain our own UTF-8 validator.bug25860
-rw-r--r--src/rabbit_binary_parser.erl37
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.