From 29078d4d53f3434ef83a1868ab91b9038e09a2ab Mon Sep 17 00:00:00 2001 From: DerpyCrabs Date: Sat, 12 Feb 2022 13:00:37 +0300 Subject: [PATCH] LibWebSocket: Don't try to send empty payload inside of frame According to RFC 6455 sections 5.5.2-5.5.3 Ping and Pong frames can have empty "Application data" that means payload can be of size 0. This change fixes failed "buffer.size()" assertion inside of Core::Stream::write_or_error by not trying to send empty payload in WebSocket::send_frame. --- Userland/Libraries/LibWebSocket/WebSocket.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWebSocket/WebSocket.cpp b/Userland/Libraries/LibWebSocket/WebSocket.cpp index a38ea4f1f4..c667ec27fd 100644 --- a/Userland/Libraries/LibWebSocket/WebSocket.cpp +++ b/Userland/Libraries/LibWebSocket/WebSocket.cpp @@ -541,6 +541,9 @@ void WebSocket::send_frame(WebSocket::OpCode op_code, ReadonlyBytes payload, boo u8 masking_key[4]; fill_with_random(masking_key, 4); m_impl->send(ReadonlyBytes(masking_key, 4)); + // don't try to send empty payload + if (payload.size() == 0) + return; // Mask the payload auto buffer_result = ByteBuffer::create_uninitialized(payload.size()); if (!buffer_result.is_error()) { @@ -550,7 +553,7 @@ void WebSocket::send_frame(WebSocket::OpCode op_code, ReadonlyBytes payload, boo } m_impl->send(masked_payload); } - } else { + } else if (payload.size() > 0) { m_impl->send(payload); } }