diff options
author | Azat Khuzhin <azat@libevent.org> | 2022-11-12 18:44:44 +0100 |
---|---|---|
committer | Azat Khuzhin <azat@libevent.org> | 2022-11-12 18:44:44 +0100 |
commit | 8482e227a8903e70cd1f13f437e5f2b4d3450688 (patch) | |
tree | 837e7a4d24cb6e9194d8257426bf590220f917cc /sample | |
parent | dda05f45e7642275c41884c59b5cd562c9f28796 (diff) | |
download | libevent-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.c | 8 |
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); |