summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorelbachir-one <bachiralfa@gmail.com>2025-06-25 23:24:23 +0100
committerelbachir-one <bachiralfa@gmail.com>2025-06-25 23:24:55 +0100
commit9b7a160dfdbf54f18fd478794cb24152ed1b040d (patch)
tree41286bfae97a769779d9237836e74121e51ddd17 /src
parente036d683fdfdef8d7b8b02eca7d56826620ea43b (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
Diffstat (limited to 'src')
-rw-r--r--src/parser.c19
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]);