Skip to content
Snippets Groups Projects
Commit 2220be23 authored by Kevin Harwell's avatar Kevin Harwell Committed by Gerrit Code Review
Browse files

Merge "AST-2018-006: Properly handle WebSocket frames with 0 length payload."

parents bd549cf9 64361379
No related branches found
No related tags found
No related merge requests found
......@@ -488,13 +488,20 @@ const char * AST_OPTIONAL_API_NAME(ast_websocket_session_id)(struct ast_websocke
* Note during the header parsing stage we try to read in small chunks just what we need, this
* is buffered data anyways, no expensive syscall required most of the time ...
*/
static inline int ws_safe_read(struct ast_websocket *session, char *buf, int len, enum ast_websocket_opcode *opcode)
static inline int ws_safe_read(struct ast_websocket *session, char *buf, size_t len, enum ast_websocket_opcode *opcode)
{
ssize_t rlen;
int xlen = len;
char *rbuf = buf;
int sanity = 10;
ast_assert(len > 0);
if (!len) {
errno = EINVAL;
return -1;
}
ao2_lock(session);
if (!session->stream) {
ao2_unlock(session);
......@@ -608,9 +615,12 @@ int AST_OPTIONAL_API_NAME(ast_websocket_read)(struct ast_websocket *session, cha
return -1;
}
if (ws_safe_read(session, *payload, *payload_len, opcode)) {
return -1;
if (*payload_len) {
if (ws_safe_read(session, *payload, *payload_len, opcode)) {
return -1;
}
}
/* If a mask is present unmask the payload */
if (mask_present) {
unsigned int pos;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment