From a67d4dea9f2ffb0ae64db5b7d738c058a65f3283 Mon Sep 17 00:00:00 2001 From: Francesco Cozzuto Date: Mon, 21 Jul 2025 23:19:11 +0200 Subject: [PATCH] Bug fixes --- Makefile | 2 +- chttp.c | 28 +++++++++++----------------- src/cert.c | 11 ++++------- src/client.c | 2 +- src/engine.c | 2 -- src/router.c | 2 +- src/sec.c | 8 ++++---- src/socket.c | 1 - src/socket_raw.c | 2 +- 9 files changed, 23 insertions(+), 35 deletions(-) diff --git a/Makefile b/Makefile index 0304486..586ce19 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CC = gcc -CFLAGS = -I. -Wall -Wextra -O0 -g3 +CFLAGS = -I. -Wall -Wextra -O0 -g3 -DHTTPS_ENABLED LFLAGS = AR = ar diff --git a/chttp.c b/chttp.c index 0dbb327..6d96682 100644 --- a/chttp.c +++ b/chttp.c @@ -1762,7 +1762,6 @@ byte_queue_write_fmt2(HTTP_ByteQueue *queue, const char *fmt, va_list args) if (len < 0) { queue->flags |= BYTE_QUEUE_ERROR; va_end(args2); - va_end(args); return; } @@ -1776,7 +1775,6 @@ byte_queue_write_fmt2(HTTP_ByteQueue *queue, const char *fmt, va_list args) byte_queue_write_ack(queue, len); va_end(args2); - va_end(args); } static void @@ -2406,24 +2404,21 @@ void http_engine_undo(HTTP_Engine *eng) static EVP_PKEY *generate_rsa_key_pair(int key_bits) { - EVP_PKEY_CTX *ctx; - EVP_PKEY *pkey; - - // Create the context for key generation - ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); + EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); if (!ctx) return NULL; - + if (EVP_PKEY_keygen_init(ctx) <= 0) { EVP_PKEY_CTX_free(ctx); return NULL; } - + if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, key_bits) <= 0) { EVP_PKEY_CTX_free(ctx); return NULL; } + EVP_PKEY *pkey; if (EVP_PKEY_keygen(ctx, &pkey) <= 0) { EVP_PKEY_CTX_free(ctx); return NULL; @@ -2673,7 +2668,7 @@ int secure_context_init_as_server(SecureContext *sec, SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION); - static char cert_buffer[1024]; + char cert_buffer[1024]; if (cert_file.len >= (int) sizeof(cert_buffer)) { SSL_CTX_free(ctx); return -1; @@ -2682,7 +2677,7 @@ int secure_context_init_as_server(SecureContext *sec, cert_buffer[cert_file.len] = '\0'; // Copy private key file path to static buffer - static char key_buffer[1024]; + char key_buffer[1024]; if (key_file.len >= (int) sizeof(key_buffer)) { SSL_CTX_free(ctx); return -1; @@ -2739,7 +2734,7 @@ int secure_context_add_cert(SecureContext *sec, SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION); - static char cert_buffer[1024]; + char cert_buffer[1024]; if (cert_file.len >= (int) sizeof(cert_buffer)) { SSL_CTX_free(ctx); return -1; @@ -2747,7 +2742,7 @@ int secure_context_add_cert(SecureContext *sec, memcpy(cert_buffer, cert_file.ptr, cert_file.len); cert_buffer[cert_file.len] = '\0'; - static char key_buffer[1024]; + char key_buffer[1024]; if (key_file.len >= (int) sizeof(key_buffer)) { SSL_CTX_free(ctx); return -1; @@ -2838,7 +2833,7 @@ int set_socket_blocking(RAW_SOCKET sock, bool value) if (value) flags &= ~O_NONBLOCK; else flags |= O_NONBLOCK; if (fcntl(sock, F_SETFL, flags) < 0) - return BAD_SOCKET; + return -1; #endif return 0; @@ -3027,7 +3022,6 @@ void socket_connect(Socket *sock, SecureContext *sec, struct addrinfo *res = NULL; int ret = getaddrinfo(pending_connect->hostname, portstr, &hints, &res); if (ret != 0) { - printf("ret=%d\n", ret); // TODO: remove pending_connect_free(pending_connect); sock->state = SOCKET_STATE_DIED; sock->events = 0; @@ -4490,7 +4484,7 @@ HTTP_Response *http_post(HTTP_String url, HTTP_String *headers, int num_headers, int ret = http_client_get_builder(client, &builder); if (ret < 0) return NULL; - http_request_builder_line(builder, HTTP_METHOD_GET, url); + http_request_builder_line(builder, HTTP_METHOD_POST, url); for (int i = 0; i < num_headers; i++) http_request_builder_header(builder, headers[i]); http_request_builder_body(builder, body); @@ -4872,7 +4866,7 @@ struct HTTP_Router { HTTP_Router *http_router_init(void) { int max_routes = 32; - HTTP_Router *router = malloc(max_routes * sizeof(HTTP_Router)); + HTTP_Router *router = malloc(sizeof(HTTP_Router) + max_routes * sizeof(Route)); if (router == NULL) return NULL; router->max_routes = max_routes; diff --git a/src/cert.c b/src/cert.c index 58440ea..afa3acb 100644 --- a/src/cert.c +++ b/src/cert.c @@ -19,24 +19,21 @@ static EVP_PKEY *generate_rsa_key_pair(int key_bits) { - EVP_PKEY_CTX *ctx; - EVP_PKEY *pkey; - - // Create the context for key generation - ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); + EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); if (!ctx) return NULL; - + if (EVP_PKEY_keygen_init(ctx) <= 0) { EVP_PKEY_CTX_free(ctx); return NULL; } - + if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, key_bits) <= 0) { EVP_PKEY_CTX_free(ctx); return NULL; } + EVP_PKEY *pkey; if (EVP_PKEY_keygen(ctx, &pkey) <= 0) { EVP_PKEY_CTX_free(ctx); return NULL; diff --git a/src/client.c b/src/client.c index ae27a8c..f213c78 100644 --- a/src/client.c +++ b/src/client.c @@ -435,7 +435,7 @@ HTTP_Response *http_post(HTTP_String url, HTTP_String *headers, int num_headers, int ret = http_client_get_builder(client, &builder); if (ret < 0) return NULL; - http_request_builder_line(builder, HTTP_METHOD_GET, url); + http_request_builder_line(builder, HTTP_METHOD_POST, url); for (int i = 0; i < num_headers; i++) http_request_builder_header(builder, headers[i]); http_request_builder_body(builder, body); diff --git a/src/engine.c b/src/engine.c index 622d700..d49b138 100644 --- a/src/engine.c +++ b/src/engine.c @@ -371,7 +371,6 @@ byte_queue_write_fmt2(HTTP_ByteQueue *queue, const char *fmt, va_list args) if (len < 0) { queue->flags |= BYTE_QUEUE_ERROR; va_end(args2); - va_end(args); return; } @@ -385,7 +384,6 @@ byte_queue_write_fmt2(HTTP_ByteQueue *queue, const char *fmt, va_list args) byte_queue_write_ack(queue, len); va_end(args2); - va_end(args); } static void diff --git a/src/router.c b/src/router.c index eef58a6..70d45f5 100644 --- a/src/router.c +++ b/src/router.c @@ -50,7 +50,7 @@ struct HTTP_Router { HTTP_Router *http_router_init(void) { int max_routes = 32; - HTTP_Router *router = malloc(max_routes * sizeof(HTTP_Router)); + HTTP_Router *router = malloc(sizeof(HTTP_Router) + max_routes * sizeof(Route)); if (router == NULL) return NULL; router->max_routes = max_routes; diff --git a/src/sec.c b/src/sec.c index 70f0e59..fa98412 100644 --- a/src/sec.c +++ b/src/sec.c @@ -108,7 +108,7 @@ int secure_context_init_as_server(SecureContext *sec, SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION); - static char cert_buffer[1024]; + char cert_buffer[1024]; if (cert_file.len >= (int) sizeof(cert_buffer)) { SSL_CTX_free(ctx); return -1; @@ -117,7 +117,7 @@ int secure_context_init_as_server(SecureContext *sec, cert_buffer[cert_file.len] = '\0'; // Copy private key file path to static buffer - static char key_buffer[1024]; + char key_buffer[1024]; if (key_file.len >= (int) sizeof(key_buffer)) { SSL_CTX_free(ctx); return -1; @@ -174,7 +174,7 @@ int secure_context_add_cert(SecureContext *sec, SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION); - static char cert_buffer[1024]; + char cert_buffer[1024]; if (cert_file.len >= (int) sizeof(cert_buffer)) { SSL_CTX_free(ctx); return -1; @@ -182,7 +182,7 @@ int secure_context_add_cert(SecureContext *sec, memcpy(cert_buffer, cert_file.ptr, cert_file.len); cert_buffer[cert_file.len] = '\0'; - static char key_buffer[1024]; + char key_buffer[1024]; if (key_file.len >= (int) sizeof(key_buffer)) { SSL_CTX_free(ctx); return -1; diff --git a/src/socket.c b/src/socket.c index 4c3e81c..7b68ab1 100644 --- a/src/socket.c +++ b/src/socket.c @@ -124,7 +124,6 @@ void socket_connect(Socket *sock, SecureContext *sec, struct addrinfo *res = NULL; int ret = getaddrinfo(pending_connect->hostname, portstr, &hints, &res); if (ret != 0) { - printf("ret=%d\n", ret); // TODO: remove pending_connect_free(pending_connect); sock->state = SOCKET_STATE_DIED; sock->events = 0; diff --git a/src/socket_raw.c b/src/socket_raw.c index 98fac58..cbb57eb 100644 --- a/src/socket_raw.c +++ b/src/socket_raw.c @@ -47,7 +47,7 @@ int set_socket_blocking(RAW_SOCKET sock, bool value) if (value) flags &= ~O_NONBLOCK; else flags |= O_NONBLOCK; if (fcntl(sock, F_SETFL, flags) < 0) - return BAD_SOCKET; + return -1; #endif return 0;