Skip to content

Commit e8b794f

Browse files
Merge pull request #3202 from rabbitmq/validate-amqp0-9-1-queue-name-length-in-management-ui
Validate amqp0.9.1 queue name length in management UI (cherry picked from commit 4ba8d05)
1 parent f3c03f6 commit e8b794f

File tree

5 files changed

+45
-6
lines changed

5 files changed

+45
-6
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
/plugins.lock
5858
/sbin/
5959
/sbin.lock
60+
erl_crash.dump
6061
.envrc
6162
*.plt
6263
*.lock

deps/rabbit/src/rabbit_parameter_validation.erl

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77

88
-module(rabbit_parameter_validation).
99

10-
-export([number/2, integer/2, binary/2, boolean/2, list/2, regex/2, proplist/3, enum/1]).
10+
-export([number/2, integer/2, binary/2, amqp091_queue_name/2,
11+
boolean/2, list/2, regex/2, proplist/3, enum/1]).
1112

1213
number(_Name, Term) when is_number(Term) ->
1314
ok;
@@ -27,6 +28,16 @@ binary(_Name, Term) when is_binary(Term) ->
2728
binary(Name, Term) ->
2829
{error, "~s should be binary, actually was ~p", [Name, Term]}.
2930

31+
amqp091_queue_name(Name, S) when is_binary(S) ->
32+
case size(S) of
33+
Len when Len =< 255 -> ok;
34+
_ -> {error, "~s should be less than 255 bytes, actually was ~p", [Name, size(S)]}
35+
end;
36+
37+
amqp091_queue_name(Name, Term) ->
38+
{error, "~s should be binary, actually was ~p", [Name, Term]}.
39+
40+
3041
boolean(_Name, Term) when is_boolean(Term) ->
3142
ok;
3243
boolean(Name, Term) ->

deps/rabbitmq_management/src/rabbit_mgmt_wm_queue.erl

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,16 @@ to_json(ReqData, Context) ->
6060

6161
accept_content(ReqData, Context) ->
6262
Name = rabbit_mgmt_util:id(queue, ReqData),
63-
rabbit_mgmt_util:direct_request(
64-
'queue.declare',
65-
fun rabbit_mgmt_format:format_accept_content/1,
66-
[{queue, Name}], "Declare queue error: ~s", ReqData, Context).
63+
%% NOTE: ?FRAMING currently defined as 0.9.1 hence validating length
64+
case rabbit_parameter_validation:amqp091_queue_name(queue, Name) of
65+
ok ->
66+
rabbit_mgmt_util:direct_request(
67+
'queue.declare',
68+
fun rabbit_mgmt_format:format_accept_content/1,
69+
[{queue, Name}], "Declare queue error: ~s", ReqData, Context);
70+
{error, F, A} ->
71+
rabbit_mgmt_util:bad_request(iolist_to_binary(io_lib:format(F ++ "~n", A)), ReqData, Context)
72+
end.
6773

6874
delete_resource(ReqData, Context) ->
6975
%% We need to retrieve manually if-unused and if-empty, as the HTTP API uses '-'

deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ amqp091_dest_validation(_Def, User) ->
152152
[{<<"dest-uri">>, validate_uri_fun(User), mandatory},
153153
{<<"dest-exchange">>, fun rabbit_parameter_validation:binary/2,optional},
154154
{<<"dest-exchange-key">>,fun rabbit_parameter_validation:binary/2,optional},
155-
{<<"dest-queue">>, fun rabbit_parameter_validation:binary/2,optional},
155+
{<<"dest-queue">>, fun rabbit_parameter_validation:amqp091_queue_name/2,optional},
156156
{<<"dest-queue-args">>, fun validate_queue_args/2, optional},
157157
{<<"add-forward-headers">>, fun rabbit_parameter_validation:boolean/2,optional},
158158
{<<"add-timestamp-header">>, fun rabbit_parameter_validation:boolean/2,optional},

deps/rabbitmq_shovel_management/test/http_SUITE.erl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,27 @@ shovels(Config) ->
166166
'dest-queue' => <<"test2">>}}, ?CREATED)
167167
|| V <- ["%2f", "v"]],
168168

169+
[http_put(Config, "/parameters/shovel/" ++ V ++ "/my-dynamic",
170+
#{value => #{'src-protocol' => <<"amqp091">>,
171+
'src-uri' => <<"amqp://">>,
172+
'src-queue' => <<"test">>,
173+
'dest-protocol' => <<"amqp091">>,
174+
'dest-uri' => <<"amqp://">>,
175+
'dest-queue' => list_to_binary(
176+
"test2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
177+
"test2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
178+
"test2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
179+
"test2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
180+
"test2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
181+
"test2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
182+
"test2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
183+
"test2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
184+
"test2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
185+
"test2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
186+
"test2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq")}},
187+
?BAD_REQUEST)
188+
|| V <- ["%2f", "v"]],
189+
169190
?assertMatch([?StaticPattern, ?Dynamic1Pattern, ?Dynamic2Pattern],
170191
http_get(Config, "/shovels", "guest", "guest", ?OK)),
171192
?assertMatch([?Dynamic1Pattern],

0 commit comments

Comments
 (0)