summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2012-06-12 18:34:48 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2012-06-12 18:34:48 +0100
commitbafc4a909649767f3ed11142d52f8416be62d680 (patch)
tree05534ea79e4ed0b23f3a7f854a2faa68321c976a
parentf69956305a2ee1a0fe7542ef5e630b5c4514058e (diff)
downloadrabbitmq-server-bafc4a909649767f3ed11142d52f8416be62d680.tar.gz
enforce frame_max
-rw-r--r--src/rabbit_reader.erl5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl
index 07b39d8c..735e7b67 100644
--- a/src/rabbit_reader.erl
+++ b/src/rabbit_reader.erl
@@ -536,6 +536,11 @@ post_process_frame({method, MethodName, _}, _ChPid,
post_process_frame(_Frame, _ChPid, State) ->
control_throttle(State).
+handle_input(frame_header, <<Type:8,Channel:16,PayloadSize:32>>,
+ #v1{connection = #connection{frame_max = FrameMax}})
+ when FrameMax /= 0 andalso PayloadSize > FrameMax - ?EMPTY_FRAME_SIZE ->
+ throw({frame_too_large, Type, Channel, PayloadSize,
+ FrameMax - ?EMPTY_FRAME_SIZE});
handle_input(frame_header, <<Type:8,Channel:16,PayloadSize:32>>, State) ->
ensure_stats_timer(
switch_callback(State, {frame_payload, Type, Channel, PayloadSize},