From 9b7a160dfdbf54f18fd478794cb24152ed1b040d Mon Sep 17 00:00:00 2001 From: elbachir-one Date: Wed, 25 Jun 2025 23:24:23 +0100 Subject: Fix memory leaks in config parser Ensure all dynamically allocated memory (e.g., should_float, can_swallow, open_in_workspace) is freed on error or cleanup --- src/parser.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src/parser.c') diff --git a/src/parser.c b/src/parser.c index 79cf29b..713a298 100644 --- a/src/parser.c +++ b/src/parser.c @@ -183,11 +183,9 @@ found: /* Initialize should_float matrix */ for (int j = 0; j < 256; j++) { - cfg->should_float[j] = calloc(1, sizeof(char *)); + cfg->should_float[j] = calloc(2, sizeof(char *)); if (!cfg->should_float[j]) { - fprintf(stderr, "calloc failed\n"); - fclose(f); - return -1; + goto cleanup_file; } } @@ -540,6 +538,19 @@ cleanup_file: free(cfg->should_float[j][0]); free(cfg->should_float[j]); } + if (cfg->can_swallow[j]) { + free(cfg->can_swallow[j][0]); + free(cfg->can_swallow[j]); + } + if (cfg->can_be_swallowed[j]) { + free(cfg->can_be_swallowed[j][0]); + free(cfg->can_be_swallowed[j]); + } + if (cfg->open_in_workspace[j]) { + free(cfg->open_in_workspace[j][0]); + free(cfg->open_in_workspace[j][1]); + free(cfg->open_in_workspace[j]); + } } for (int i = 0; i < torun; i++) { free(cfg->torun[i]); -- cgit v1.2.3