diff options
author | Matthew Wild <mwild1@gmail.com> | 2020-09-17 16:41:48 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2020-09-17 16:41:48 +0100 |
commit | 6b5f15910327246464e0b67593fc6b4be186c1d7 (patch) | |
tree | fb2f25303f33c81f8a53e73a61c7901ba5ec9c40 | |
parent | bd7d32aa8d11ae959b90ac18e922261d27d0a3a3 (diff) | |
download | prosody-6b5f15910327246464e0b67593fc6b4be186c1d7.tar.gz prosody-6b5f15910327246464e0b67593fc6b4be186c1d7.zip |
mod_websocket: handle full frame buffer and raise stream error
-rw-r--r-- | plugins/mod_websocket.lua | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/plugins/mod_websocket.lua b/plugins/mod_websocket.lua index ad94486b..d3b035db 100644 --- a/plugins/mod_websocket.lua +++ b/plugins/mod_websocket.lua @@ -275,7 +275,11 @@ function handle_request(event) -- max frame header is 22 bytes local frameBuffer = dbuffer.new(stanza_size_limit + 22, frame_fragment_limit); add_filter(session, "bytes/in", function(data) - frameBuffer:write(data); + if not frameBuffer:write(data) then + session.log("warn", "websocket frame buffer full - terminating session"); + session:close({ condition = "resource-constraint", text = "frame buffer exceeded" }); + return; + end local cache = {}; local frame, length = parse_frame(frameBuffer); |