]> granicus.if.org Git - libevent/commitdiff
ws-chat-server: avoid SIGSEGV in case of evws_new_session() failure
authorAzat Khuzhin <azat@libevent.org>
Sat, 12 Nov 2022 17:44:44 +0000 (18:44 +0100)
committerAzat Khuzhin <azat@libevent.org>
Sat, 12 Nov 2022 17:44:44 +0000 (18:44 +0100)
sample/ws-chat-server.c

index 731d1281e70844ee515b8aa3ba869e38987f98fb..fae23e35f782f5c0088e27e8ff8dd65f555a2cfd 100644 (file)
@@ -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);