summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <klishinm@vmware.com>2021-10-13 13:54:31 +0300
committerGitHub <noreply@github.com>2021-10-13 13:54:31 +0300
commit1bcb16087b31eaf55241b089cbf69953b388b099 (patch)
treeeaf428d944dc02a6b41ca9b52f38209bd0fe0823
parentbde21ea8510b7ac66ceb90582b4b6963cd5efa37 (diff)
parent60a9d80725e811fd14c9c8be1065c871828a5c79 (diff)
downloadrabbitmq-server-git-1bcb16087b31eaf55241b089cbf69953b388b099.tar.gz
Merge pull request #3567 from rabbitmq/mergify/bp/v3.9.x/pr-3565
Stream queue: handle unsupported header value types (backport #3565)
-rw-r--r--deps/rabbit/src/rabbit_msg_record.erl9
-rw-r--r--deps/rabbit/test/rabbit_msg_record_SUITE.erl17
2 files changed, 25 insertions, 1 deletions
diff --git a/deps/rabbit/src/rabbit_msg_record.erl b/deps/rabbit/src/rabbit_msg_record.erl
index 247a9d8677..7520788d28 100644
--- a/deps/rabbit/src/rabbit_msg_record.erl
+++ b/deps/rabbit/src/rabbit_msg_record.erl
@@ -195,7 +195,7 @@ from_amqp091(#'P_basic'{message_id = MsgId,
<- case Headers of
undefined -> [];
_ -> Headers
- end],
+ end, not unsupported_header_value_type(T)],
%% properties that do not map directly to AMQP 1.0 properties are stored
%% in application properties
APC = map_add(utf8, <<"x-basic-type">>, utf8, Type,
@@ -395,6 +395,13 @@ message_id({utf8, S}, HKey, H0) ->
message_id(MsgId, _, H) ->
{H, unwrap(MsgId)}.
+ unsupported_header_value_type(array) ->
+ true;
+ unsupported_header_value_type(table) ->
+ true;
+ unsupported_header_value_type(_) ->
+ false.
+
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
-endif.
diff --git a/deps/rabbit/test/rabbit_msg_record_SUITE.erl b/deps/rabbit/test/rabbit_msg_record_SUITE.erl
index 0c86ce646e..7a8447ed02 100644
--- a/deps/rabbit/test/rabbit_msg_record_SUITE.erl
+++ b/deps/rabbit/test/rabbit_msg_record_SUITE.erl
@@ -24,6 +24,7 @@ all() ->
all_tests() ->
[
ampq091_roundtrip,
+ unsupported_091_header_is_dropped,
message_id_ulong,
message_id_uuid,
message_id_binary,
@@ -90,6 +91,22 @@ ampq091_roundtrip(_Config) ->
test_amqp091_roundtrip(#'P_basic'{}, Payload),
ok.
+unsupported_091_header_is_dropped(_Config) ->
+ Props = #'P_basic'{
+ headers = [
+ {<<"x-received-from">>, array, []}
+ ]
+ },
+ MsgRecord0 = rabbit_msg_record:from_amqp091(Props, <<"payload">>),
+ MsgRecord = rabbit_msg_record:init(
+ iolist_to_binary(rabbit_msg_record:to_iodata(MsgRecord0))),
+ % meck:unload(),
+ {PropsOut, <<"payload">>} = rabbit_msg_record:to_amqp091(MsgRecord),
+
+ ?assertMatch(#'P_basic'{headers = undefined}, PropsOut),
+
+ ok.
+
message_id_ulong(_Config) ->
Num = 9876789,
ULong = erlang:integer_to_binary(Num),