Merge "res_http_websocket: Avoid passing strlen() to ast_websocket_write()."
This commit is contained in:
commit
3ba6099a9e
|
@ -3721,7 +3721,7 @@ static int __sip_xmit(struct sip_pvt *p, struct ast_str *data)
|
||||||
} else if (p->socket.tcptls_session) {
|
} else if (p->socket.tcptls_session) {
|
||||||
res = sip_tcptls_write(p->socket.tcptls_session, ast_str_buffer(data), ast_str_strlen(data));
|
res = sip_tcptls_write(p->socket.tcptls_session, ast_str_buffer(data), ast_str_strlen(data));
|
||||||
} else if (p->socket.ws_session) {
|
} else if (p->socket.ws_session) {
|
||||||
if (!(res = ast_websocket_write(p->socket.ws_session, AST_WEBSOCKET_OPCODE_TEXT, ast_str_buffer(data), ast_str_strlen(data)))) {
|
if (!(res = ast_websocket_write_string(p->socket.ws_session, ast_str_buffer(data)))) {
|
||||||
/* The WebSocket API just returns 0 on success and -1 on failure, while this code expects the payload length to be returned */
|
/* The WebSocket API just returns 0 on success and -1 on failure, while this code expects the payload length to be returned */
|
||||||
res = ast_str_strlen(data);
|
res = ast_str_strlen(data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -163,9 +163,7 @@ int ast_ari_websocket_session_write(struct ast_ari_websocket_session *session,
|
||||||
#ifdef AST_DEVMODE
|
#ifdef AST_DEVMODE
|
||||||
if (!session->validator(message)) {
|
if (!session->validator(message)) {
|
||||||
ast_log(LOG_ERROR, "Outgoing message failed validation\n");
|
ast_log(LOG_ERROR, "Outgoing message failed validation\n");
|
||||||
return ast_websocket_write(session->ws_session,
|
return ast_websocket_write_string(session->ws_session, VALIDATION_FAILED);
|
||||||
AST_WEBSOCKET_OPCODE_TEXT, VALIDATION_FAILED,
|
|
||||||
strlen(VALIDATION_FAILED));
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -177,8 +175,7 @@ int ast_ari_websocket_session_write(struct ast_ari_websocket_session *session,
|
||||||
}
|
}
|
||||||
|
|
||||||
ast_debug(3, "Examining ARI event: \n%s\n", str);
|
ast_debug(3, "Examining ARI event: \n%s\n", str);
|
||||||
if (ast_websocket_write(session->ws_session,
|
if (ast_websocket_write_string(session->ws_session, str)) {
|
||||||
AST_WEBSOCKET_OPCODE_TEXT, str, strlen(str))) {
|
|
||||||
ast_log(LOG_NOTICE, "Problem occurred during websocket write, websocket closed\n");
|
ast_log(LOG_NOTICE, "Problem occurred during websocket write, websocket closed\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1370,8 +1370,17 @@ int AST_OPTIONAL_API_NAME(ast_websocket_read_string)
|
||||||
int AST_OPTIONAL_API_NAME(ast_websocket_write_string)
|
int AST_OPTIONAL_API_NAME(ast_websocket_write_string)
|
||||||
(struct ast_websocket *ws, const char *buf)
|
(struct ast_websocket *ws, const char *buf)
|
||||||
{
|
{
|
||||||
|
uint64_t len = strlen(buf);
|
||||||
|
|
||||||
|
/* We do not pass strlen(buf) to ast_websocket_write() directly because the
|
||||||
|
* size_t returned by strlen() may not require the same storage size
|
||||||
|
* as the uint64_t that ast_websocket_write() uses. This normally
|
||||||
|
* would not cause a problem, but since ast_websocket_write() uses
|
||||||
|
* the optional API, this function call goes through a series of macros
|
||||||
|
* that may cause a 32-bit to 64-bit conversion to go awry.
|
||||||
|
*/
|
||||||
return ast_websocket_write(ws, AST_WEBSOCKET_OPCODE_TEXT,
|
return ast_websocket_write(ws, AST_WEBSOCKET_OPCODE_TEXT,
|
||||||
(char *)buf, strlen(buf));
|
(char *)buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int load_module(void)
|
static int load_module(void)
|
||||||
|
|
|
@ -63,8 +63,9 @@ static pj_status_t ws_send_msg(pjsip_transport *transport,
|
||||||
pjsip_transport_callback callback)
|
pjsip_transport_callback callback)
|
||||||
{
|
{
|
||||||
struct ws_transport *wstransport = (struct ws_transport *)transport;
|
struct ws_transport *wstransport = (struct ws_transport *)transport;
|
||||||
|
uint64_t len = tdata->buf.cur - tdata->buf.start;
|
||||||
|
|
||||||
if (ast_websocket_write(wstransport->ws_session, AST_WEBSOCKET_OPCODE_TEXT, tdata->buf.start, (int)(tdata->buf.cur - tdata->buf.start))) {
|
if (ast_websocket_write(wstransport->ws_session, AST_WEBSOCKET_OPCODE_TEXT, tdata->buf.start, len)) {
|
||||||
return PJ_EUNKNOWN;
|
return PJ_EUNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue