diff options
| author | frosty <gabriel@bwaaa.monster> | 2026-08-15 18:26:10 -0400 |
|---|---|---|
| committer | frosty <gabriel@bwaaa.monster> | 2026-08-15 18:26:10 -0400 |
| commit | 916d3497b9316ec6b64646d456d3c03141b1fe21 (patch) | |
| tree | f3dc415738927d514b52655de0fa3e139e0121ff | |
| parent | bc42e791cf4b56f2854e87666e3295d8b167ad24 (diff) | |
| download | beaker-916d3497b9316ec6b64646d456d3c03141b1fe21.tar.gz | |
fix: isolate cookie state between requests
| -rw-r--r-- | src/beaker_globals.h | 2 | ||||
| -rw-r--r-- | src/http.c | 11 | ||||
| -rw-r--r-- | src/server.c | 2 |
3 files changed, 11 insertions, 4 deletions
diff --git a/src/beaker_globals.h b/src/beaker_globals.h index 96d4dcf..e01704c 100644 --- a/src/beaker_globals.h +++ b/src/beaker_globals.h @@ -49,6 +49,8 @@ void beaker_log_request(const char *remote_addr, const char *method, const char *path, int status, size_t response_size, double duration_ms); +void beaker_clear_response_cookies(void); + BeakerRequestReadResult beaker_read_request_headers(int socket, char *buffer, size_t buffer_size, size_t *bytes_read); @@ -58,6 +58,11 @@ static void build_cookie_headers(char *cookie_headers_buffer, } } +void beaker_clear_response_cookies(void) { + memset(cookies_to_set, 0, sizeof(cookies_to_set)); + cookies_to_set_count = 0; +} + void send_status(const char *status_line) { if (current_client_socket == -1) { beaker_log("ERROR", @@ -97,6 +102,7 @@ void send_response(const char *html) { char cookie_headers[BUFFER_SIZE]; build_cookie_headers(cookie_headers, sizeof(cookie_headers)); + beaker_clear_response_cookies(); snprintf(http_response_header, sizeof(http_response_header), "HTTP/1.1 200 OK\r\n" @@ -119,8 +125,6 @@ void send_response(const char *html) { "send_response: Failed to send HTML body.\n"); return; } - - cookies_to_set_count = 0; } void send_redirect(const char *location) { @@ -137,6 +141,7 @@ void send_redirect(const char *location) { char cookie_headers[BUFFER_SIZE]; build_cookie_headers(cookie_headers, sizeof(cookie_headers)); + beaker_clear_response_cookies(); snprintf(http_response_header, sizeof(http_response_header), "HTTP/1.1 302 Found\r\n" @@ -152,8 +157,6 @@ void send_redirect(const char *location) { "send_redirect: Failed to send redirect header.\n"); return; } - - cookies_to_set_count = 0; } void set_cookie(const char *name, const char *value, const char *expires, diff --git a/src/server.c b/src/server.c index 5ac20a0..7d5eb8f 100644 --- a/src/server.c +++ b/src/server.c @@ -200,6 +200,7 @@ static void finish_client_connection(int socket, char *requested_path, beaker_log_request(current_request_info.remote_addr, method, path, current_response_status, current_response_size, duration_ms); + beaker_clear_response_cookies(); free(requested_path); close(socket); current_client_socket = -1; @@ -214,6 +215,7 @@ void handle_client_connection(int new_socket) { struct timespec started_at; clock_gettime(CLOCK_MONOTONIC, &started_at); + beaker_clear_response_cookies(); current_response_status = 0; current_response_size = 0; beaker_reset_write_deadline(); |
