Skip to content

Commit 9d8ae14

Browse files
committed
Use correct AMQP filter expression string modifier prefix
Section 4.1.1 of AMQP Filter Expressions Working Draft 09 defines `&` (ampersand) instead of `$` (dollar) as the string modifier prefix.
1 parent fc4a691 commit 9d8ae14

File tree

2 files changed

+20
-20
lines changed

2 files changed

+20
-20
lines changed

deps/rabbit/src/rabbit_amqp_filtex.erl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,14 +182,14 @@ validate_app_props(_, _) ->
182182
error.
183183

184184
%% [filtex-v1.0-wd09 4.1.1]
185-
parse_string_modifier_prefix(<<"$s:", Suffix/binary>>) ->
185+
parse_string_modifier_prefix(<<"&s:", Suffix/binary>>) ->
186186
{suffix, size(Suffix), Suffix};
187-
parse_string_modifier_prefix(<<"$p:", Prefix/binary>>) ->
187+
parse_string_modifier_prefix(<<"&p:", Prefix/binary>>) ->
188188
{prefix, size(Prefix), Prefix};
189-
parse_string_modifier_prefix(<<"$$", _/binary>> = String) ->
189+
parse_string_modifier_prefix(<<"&&", _/binary>> = String) ->
190190
%% "Escape prefix for case-sensitive matching of a string starting with ‘&’"
191191
string:slice(String, 1);
192-
parse_string_modifier_prefix(<<"$", _/binary>> = String) ->
192+
parse_string_modifier_prefix(<<"&", _/binary>> = String) ->
193193
throw({?MODULE, invalid_reference_field_value, String});
194194
parse_string_modifier_prefix(String) ->
195195
String.

deps/rabbit/test/amqp_filtex_SUITE.erl

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ string_modifier(Config) ->
552552
ok = amqp10_client:send_msg(
553553
Sender,
554554
amqp10_msg:set_properties(
555-
#{subject => <<"$Hello">>,
555+
#{subject => <<"&Hello">>,
556556
reply_to_group_id => <<"xyz 5">>},
557557
amqp10_msg:new(<<"t3">>, <<"m3">>))),
558558

@@ -561,17 +561,17 @@ string_modifier(Config) ->
561561
flush(sent),
562562

563563
PropsFilter1 = [
564-
{{symbol, <<"to">>}, {utf8, <<"$p:abc ">>}},
565-
{{symbol, <<"reply-to">>}, {utf8, <<"$p:abc">>}},
566-
{{symbol, <<"subject">>}, {utf8, <<"$p:ab">>}},
567-
{{symbol, <<"group-id">>}, {utf8, <<"$p:a">>}},
568-
{{symbol, <<"reply-to-group-id">>}, {utf8, <<"$s:5">>}},
569-
{{symbol, <<"correlation-id">>}, {utf8, <<"$s:abc 7">>}},
570-
{{symbol, <<"message-id">>}, {utf8, <<"$p:abc 6">>}}
564+
{{symbol, <<"to">>}, {utf8, <<"&p:abc ">>}},
565+
{{symbol, <<"reply-to">>}, {utf8, <<"&p:abc">>}},
566+
{{symbol, <<"subject">>}, {utf8, <<"&p:ab">>}},
567+
{{symbol, <<"group-id">>}, {utf8, <<"&p:a">>}},
568+
{{symbol, <<"reply-to-group-id">>}, {utf8, <<"&s:5">>}},
569+
{{symbol, <<"correlation-id">>}, {utf8, <<"&s:abc 7">>}},
570+
{{symbol, <<"message-id">>}, {utf8, <<"&p:abc 6">>}}
571571
],
572572
AppPropsFilter1 = [
573-
{{utf8, <<"k1">>}, {utf8, <<"$s: 8">>}},
574-
{{utf8, <<"k2">>}, {utf8, <<"$p:abc ">>}}
573+
{{utf8, <<"k1">>}, {utf8, <<"&s: 8">>}},
574+
{{utf8, <<"k2">>}, {utf8, <<"&p:abc ">>}}
575575
],
576576
Filter1 = #{?DESCRIPTOR_NAME_PROPERTIES_FILTER => {map, PropsFilter1},
577577
?DESCRIPTOR_NAME_APPLICATION_PROPERTIES_FILTER => {map, AppPropsFilter1},
@@ -590,7 +590,7 @@ string_modifier(Config) ->
590590
%% Same filters as before except for subject which shouldn't match anymore.
591591
PropsFilter2 = lists:keyreplace(
592592
{symbol, <<"subject">>}, 1, PropsFilter1,
593-
{{symbol, <<"subject">>}, {utf8, <<"$s:xxxxxxxxxxxxxx">>}}),
593+
{{symbol, <<"subject">>}, {utf8, <<"&s:xxxxxxxxxxxxxx">>}}),
594594
Filter2 = #{?DESCRIPTOR_NAME_PROPERTIES_FILTER => {map, PropsFilter2},
595595
?DESCRIPTOR_NAME_APPLICATION_PROPERTIES_FILTER => {map, AppPropsFilter1},
596596
<<"rabbitmq:stream-offset-spec">> => <<"first">>},
@@ -601,7 +601,7 @@ string_modifier(Config) ->
601601
ok = assert_no_msg_received(?LINE),
602602
ok = detach_link_sync(Receiver2),
603603

604-
PropsFilter3 = [{{symbol, <<"reply-to-group-id">>}, {utf8, <<"$s: 5">>}}],
604+
PropsFilter3 = [{{symbol, <<"reply-to-group-id">>}, {utf8, <<"&s: 5">>}}],
605605
Filter3 = #{?DESCRIPTOR_NAME_PROPERTIES_FILTER => {map, PropsFilter3},
606606
<<"rabbitmq:stream-offset-spec">> => <<"first">>},
607607
{ok, Receiver3} = amqp10_client:attach_receiver_link(
@@ -618,8 +618,8 @@ string_modifier(Config) ->
618618
end,
619619
ok = detach_link_sync(Receiver3),
620620

621-
%% '$$" is the escape prefix for case-sensitive matching of a string starting with ‘&’
622-
PropsFilter4 = [{{symbol, <<"subject">>}, {utf8, <<"$$Hello">>}}],
621+
%% '&&" is the escape prefix for case-sensitive matching of a string starting with ‘&’
622+
PropsFilter4 = [{{symbol, <<"subject">>}, {utf8, <<"&&Hello">>}}],
623623
Filter4 = #{?DESCRIPTOR_NAME_PROPERTIES_FILTER => {map, PropsFilter4},
624624
<<"rabbitmq:stream-offset-spec">> => <<"first">>},
625625
{ok, Receiver4} = amqp10_client:attach_receiver_link(
@@ -629,12 +629,12 @@ string_modifier(Config) ->
629629
?assertEqual([<<"m3">>], amqp10_msg:body(R4M3)),
630630
ok = detach_link_sync(Receiver4),
631631

632-
%% Starting the reference field value with $ is invalid without using a valid modifier
632+
%% Starting the reference field value with & is invalid without using a valid modifier
633633
%% prefix is invalid.
634634
%% RabbitMQ should exclude this filter in its reply attach frame because
635635
%% "the sending endpoint [RabbitMQ] sets the filter actually in place".
636636
%% Hence, no filter expression is actually in place and we should receive all messages.
637-
PropsFilter5 = [{{symbol, <<"subject">>}, {utf8, <<"$Hello">>}}],
637+
PropsFilter5 = [{{symbol, <<"subject">>}, {utf8, <<"&Hello">>}}],
638638
Filter5 = #{?DESCRIPTOR_NAME_PROPERTIES_FILTER => {map, PropsFilter5},
639639
<<"rabbitmq:stream-offset-spec">> => <<"first">>},
640640
{ok, Receiver5} = amqp10_client:attach_receiver_link(

0 commit comments

Comments
 (0)