From 0812b1838c8ca61f28d32d19fecaf99b9a5ea1f2 Mon Sep 17 00:00:00 2001 From: Oskar Eichler <62393985+OskarEichler@users.noreply.github.com> Date: Sun, 30 Aug 2026 04:50:48 +0200 Subject: [PATCH] Prevent oversized outgoing control frames --- lib/websocket/driver/hybi.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/websocket/driver/hybi.rb b/lib/websocket/driver/hybi.rb index 3487c4a..c2ddd1f 100644 --- a/lib/websocket/driver/hybi.rb +++ b/lib/websocket/driver/hybi.rb @@ -131,8 +131,9 @@ def binary(message) end def ping(message = '', &callback) - @ping_callbacks[message] = callback if callback - frame(message, :ping) + sent = frame(message, :ping) + @ping_callbacks[message] = callback if sent && callback + sent end def pong(message = '') @@ -172,6 +173,10 @@ def frame(buffer, type = nil, code = nil) message.opcode = OPCODES[type] message.data = payload + if !MESSAGE_OPCODES.include?(message.opcode) && payload.bytesize > 125 + raise ArgumentError, 'Control frame payload cannot exceed 125 bytes' + end + if MESSAGE_OPCODES.include?(message.opcode) message = @extensions.process_outgoing_message(message) end