diff --git a/deps/rabbit_common/src/rabbit_binary_generator.erl b/deps/rabbit_common/src/rabbit_binary_generator.erl index eb256052c0b6..fa480394b4d9 100644 --- a/deps/rabbit_common/src/rabbit_binary_generator.erl +++ b/deps/rabbit_common/src/rabbit_binary_generator.erl @@ -228,8 +228,5 @@ lookup_amqp_exception(Other, Protocol) -> {ShouldClose, Code, Text, none}. amqp_exception_explanation(Text, Expl) -> - ExplBin = list_to_binary(Expl), - CompleteTextBin = <>, - if size(CompleteTextBin) > 255 -> <>; - true -> CompleteTextBin - end. + LimitedText = io_lib:format("~ts - ~ts", [Text, Expl], [{chars_limit, 255}]), + unicode:characters_to_binary(LimitedText). diff --git a/deps/rabbit_common/test/unit_SUITE.erl b/deps/rabbit_common/test/unit_SUITE.erl index 0336bdb7fb57..deed8051303c 100644 --- a/deps/rabbit_common/test/unit_SUITE.erl +++ b/deps/rabbit_common/test/unit_SUITE.erl @@ -46,6 +46,8 @@ groups() -> pid_decompose_compose, platform_and_version, frame_encoding_does_not_fail_with_empty_binary_payload, + map_exception_does_not_fail_with_unicode_explaination_case1, + map_exception_does_not_fail_with_unicode_explaination_case2, amqp_table_conversion, name_type, get_erl_path, @@ -415,6 +417,20 @@ frame_encoding_does_not_fail_with_empty_binary_payload(_Config) -> ]], ok. +map_exception_does_not_fail_with_unicode_explaination_case1(_Config) -> + NonAsciiExplaination = "no queue 'non_ascii_name_😍_δ½ ε₯½' in vhost '/'", + rabbit_binary_generator:map_exception(0, + #amqp_error{name = not_found, explanation = NonAsciiExplaination, method = 'queue.declare'}, + rabbit_framing_amqp_0_9_1), + ok. + +map_exception_does_not_fail_with_unicode_explaination_case2(_Config) -> + NonAsciiExplaination = "no queue 'ΠΊΡ€ΠΎΠ»ΠΈΠΊ 🐰' in vhost '/'", + rabbit_binary_generator:map_exception(0, + #amqp_error{name = not_found, explanation = NonAsciiExplaination, method = 'queue.declare'}, + rabbit_framing_amqp_0_9_1), + ok. + amqp_table_conversion(_Config) -> assert_table(#{}, []), assert_table(#{<<"x-expires">> => 1000},