diff options
| author | elbachir-one <bachiralfa@gmail.com> | 2025-06-25 23:24:23 +0100 |
|---|---|---|
| committer | elbachir-one <bachiralfa@gmail.com> | 2025-06-25 23:24:55 +0100 |
| commit | 9b7a160dfdbf54f18fd478794cb24152ed1b040d (patch) | |
| tree | 41286bfae97a769779d9237836e74121e51ddd17 | |
| parent | e036d683fdfdef8d7b8b02eca7d56826620ea43b (diff) | |
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
| -rw-r--r-- | src/parser.c | 19 |
1 files changed, 15 insertions, 4 deletions
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]); |
