mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 03:37:43 +00:00
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.
This commit is contained in:
parent
e379147f64
commit
29078d4d53
1 changed files with 4 additions and 1 deletions
|
@ -541,6 +541,9 @@ void WebSocket::send_frame(WebSocket::OpCode op_code, ReadonlyBytes payload, boo
|
||||||
u8 masking_key[4];
|
u8 masking_key[4];
|
||||||
fill_with_random(masking_key, 4);
|
fill_with_random(masking_key, 4);
|
||||||
m_impl->send(ReadonlyBytes(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
|
// Mask the payload
|
||||||
auto buffer_result = ByteBuffer::create_uninitialized(payload.size());
|
auto buffer_result = ByteBuffer::create_uninitialized(payload.size());
|
||||||
if (!buffer_result.is_error()) {
|
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);
|
m_impl->send(masked_payload);
|
||||||
}
|
}
|
||||||
} else {
|
} else if (payload.size() > 0) {
|
||||||
m_impl->send(payload);
|
m_impl->send(payload);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue