summaryrefslogtreecommitdiff
path: root/sample
diff options
context:
space:
mode:
authorAzat Khuzhin <azat@libevent.org>2022-11-12 18:44:44 +0100
committerAzat Khuzhin <azat@libevent.org>2022-11-12 18:44:44 +0100
commit8482e227a8903e70cd1f13f437e5f2b4d3450688 (patch)
tree837e7a4d24cb6e9194d8257426bf590220f917cc /sample
parentdda05f45e7642275c41884c59b5cd562c9f28796 (diff)
downloadlibevent-8482e227a8903e70cd1f13f437e5f2b4d3450688.tar.gz
ws-chat-server: avoid SIGSEGV in case of evws_new_session() failure
Diffstat (limited to 'sample')
-rw-r--r--sample/ws-chat-server.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sample/ws-chat-server.c b/sample/ws-chat-server.c
index 731d1281..fae23e35 100644
--- a/sample/ws-chat-server.c
+++ b/sample/ws-chat-server.c
@@ -152,13 +152,19 @@ on_ws(struct evhttp_request *req, void *arg)
socklen_t len;
client = calloc(sizeof(*client), 1);
+ addr2str((struct sockaddr *)&addr, client->name, sizeof(client->name));
client->evws = evws_new_session(req, on_msg_cb, client, 0);
+ if (!client->evws) {
+ free(client);
+ log_d("Failed to create session (for %s)\n", client->name);
+ return;
+ }
+
fd = bufferevent_getfd(evws_connection_get_bufferevent(client->evws));
len = sizeof(addr);
getpeername(fd, (struct sockaddr *)&addr, &len);
- addr2str((struct sockaddr *)&addr, client->name, sizeof(client->name));
log_d("New client joined from %s\n", client->name);
evws_connection_set_closecb(client->evws, on_close_cb, client);