From 87436176491d2dec4a87da83d0d165451598c09d Mon Sep 17 00:00:00 2001 From: Francesco Date: Fri, 17 Oct 2025 02:02:41 +0200 Subject: [PATCH] fix(http): response len --- src/http/http.c | 6 ++++-- src/server/worker.c | 10 ++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/http/http.c b/src/http/http.c index 00fe606..de42441 100644 --- a/src/http/http.c +++ b/src/http/http.c @@ -274,9 +274,9 @@ size_t http_response_builder(char **response, cws_http_status_e status, char *co char *status_code = http_status_string(status); size_t header_len = http_header_len(status_code, content_type, body_len_bytes); - size_t total_len = header_len + body_len_bytes + 1; + size_t total_len = header_len + body_len_bytes; - *response = malloc(total_len); + *response = malloc(total_len + 1); if (*response == NULL) { return 0; } @@ -288,6 +288,8 @@ size_t http_response_builder(char **response, cws_http_status_e status, char *co memcpy(*response + header_len, body, body_len_bytes); } + (*response)[total_len] = '\0'; + return total_len; } diff --git a/src/server/worker.c b/src/server/worker.c index 54bbf37..1ea9eef 100644 --- a/src/server/worker.c +++ b/src/server/worker.c @@ -38,6 +38,9 @@ static int cws_read_data(int sockfd, string_s *str) { memset(tmp, 0, sizeof tmp); int bytes = sock_readall(sockfd, tmp, sizeof(tmp)); + if (bytes < 0) { + return -1; + } string_append(str, tmp); return bytes; @@ -139,7 +142,7 @@ void cws_server_close_client(int epfd, int client_fd) { cws_server_ret cws_epoll_add(int epfd, int sockfd) { struct epoll_event event; - event.events = EPOLLIN | EPOLLET; + event.events = EPOLLIN; event.data.fd = sockfd; const int status = epoll_ctl(epfd, EPOLL_CTL_ADD, sockfd, &event); @@ -167,9 +170,7 @@ cws_server_ret cws_server_handle_client_data(int epfd, int client_fd) { size_t total_bytes = cws_read_data(client_fd, data); if (total_bytes <= 0) { - if (data) { - string_free(data); - } + string_free(data); cws_server_close_client(epfd, client_fd); return CWS_SERVER_CLIENT_DISCONNECTED_ERROR; @@ -187,6 +188,7 @@ cws_server_ret cws_server_handle_client_data(int epfd, int client_fd) { cws_http_send_response(request, HTTP_OK); cws_http_free(request); + cws_server_close_client(epfd, client_fd); return CWS_SERVER_OK; }