diff options
| author | Raghuram Subramani <raghus2247@gmail.com> | 2025-07-29 22:33:52 +0530 |
|---|---|---|
| committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-07-29 22:33:52 +0530 |
| commit | 22b62228d0b8fe081ec6df95cf331b3d290127ab (patch) | |
| tree | e7f14f22742945241118dbd9ad2fbdc0c5ccb8d8 | |
| parent | 5b6b95cd4f875d7a619aa69bde8d1d2f93bbc254 (diff) | |
engine,lexer: fix memory leaks
| -rw-r--r-- | src/engine.c | 12 | ||||
| -rw-r--r-- | src/lexer.c | 8 |
2 files changed, 13 insertions, 7 deletions
diff --git a/src/engine.c b/src/engine.c index 8bc62e7..f4b2f63 100644 --- a/src/engine.c +++ b/src/engine.c @@ -92,12 +92,12 @@ handle_eachdo(char **buffer, key_match_t *match, directive_t *directive) char *path; - asprintf(&path, "%s/%s", msg->base_directory, operands->key); + asprintf(&path, "%s/%s", msg->base_directory, trim(operands->key)); list_t *files = enumfilesindir(path); free(path); if (files == NULL) { - printf("Could not find key %s\n", operands->key); + printf("Could not find key %s\n", trim(operands->key)); free(operands); return; } @@ -110,7 +110,7 @@ handle_eachdo(char **buffer, key_match_t *match, directive_t *directive) asprintf(&path, "%s/%s/%s", msg->base_directory, - operands->key, + trim(operands->key), (char *) file_wrp->ptr); FILE *f = fopen(path, "r"); @@ -189,8 +189,9 @@ handle_eachdo(char **buffer, key_match_t *match, directive_t *directive) list_delete(atoms); free(content); free(temp_buffer); - free(operands); + free(operands->key); free(original_content); + free(operands); } list_t * @@ -243,6 +244,9 @@ engine_ingest(char **buffer) break; case PUT: + free(directive->operands); + skip++; + break; case ENDEACHDO: case BODY: case CONTENT: diff --git a/src/lexer.c b/src/lexer.c index 9e38960..829942a 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -188,8 +188,8 @@ lexer_handle_eachdo(directive_t *directive, directive->type = EACHDO; eachdo_operands_t *operands = malloc(sizeof(eachdo_operands_t)); - operands->key = trim(strndup(buffer + n + strlen("eachdo"), - match->length - n - strlen("eachdo") - 2)); + operands->key = strndup(buffer + n + strlen("eachdo"), + match->length - n - strlen("eachdo") - 2); buffer += match->length; key_match_t *new_match; @@ -210,7 +210,6 @@ lexer_handle_eachdo(directive_t *directive, printf("Cannot find directive: %.*s\n", new_match->length, buffer + new_match->offset); - free(new_directive); free(new_match); free(directive); return; @@ -219,6 +218,9 @@ lexer_handle_eachdo(directive_t *directive, if (new_directive->type == ENDEACHDO) { free(new_directive); break; + } else { + /* TODO: delete_directive */ + free(new_directive->operands); } free(new_directive); |
