diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-07-30 08:44:05 +0530 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-07-30 08:44:05 +0530 |
commit | 9b68f90d3d705017990d4cf77cdf94c476842c34 (patch) | |
tree | d17207025b1ddf66c2e3e9e11bbd4e7d2cb89726 /src/lexer.c | |
parent | 6b618e71f577ecc3e2665717515828d1ae12927b (diff) |
engine,lexer: avoid memory leaks using delete_directive()
Diffstat (limited to 'src/lexer.c')
-rw-r--r-- | src/lexer.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/src/lexer.c b/src/lexer.c index 47f76f0..aa64c99 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -36,7 +36,7 @@ lex(char *buffer) raw_directive->operands = raw_content; list_add(directives, raw_directive); - free(raw_directive); + directive_delete(raw_directive); } buffer += match->offset + match->length; @@ -56,7 +56,7 @@ lex(char *buffer) raw_directive->operands = raw_content; list_add(directives, raw_directive); - free(raw_directive); + directive_delete(raw_directive); } return directives; @@ -147,7 +147,7 @@ lexer_handle_contentfor(directive_t *directive, if (new_match == NULL) { printf("Cannot find endcontent\n"); free(new_match); - free(directive); + directive_delete(directive); /* TODO: Handle early returns */ return; } @@ -157,18 +157,18 @@ lexer_handle_contentfor(directive_t *directive, printf("Cannot find directive: %.*s\n", new_match->length, buffer + new_match->offset); - free(new_directive); + directive_delete(new_directive); free(new_match); - free(directive); + directive_delete(directive); return; } if (new_directive->type == ENDCONTENT) { - free(new_directive); + directive_delete(new_directive); break; } - free(new_directive); + directive_delete(new_directive); free(new_match); } @@ -201,7 +201,7 @@ lexer_handle_eachdo(directive_t *directive, if (new_match == NULL) { printf("Cannot find endeachdo\n"); free(new_match); - free(directive); + directive_delete(directive); /* TODO: Handle early returns */ return; } @@ -212,19 +212,19 @@ lexer_handle_eachdo(directive_t *directive, new_match->length, buffer + new_match->offset); free(new_match); - free(directive); + directive_delete(directive); return; } if (new_directive->type == ENDEACHDO) { - free(new_directive); + directive_delete(new_directive); break; } else { /* TODO: delete_directive */ - free(new_directive->operands); + directive_delete(new_directive->operands); } - free(new_directive); + directive_delete(new_directive); free(new_match); skip++; @@ -316,7 +316,7 @@ found_start: } else if (DIRECTIVE_IS("put")) { lexer_handle_put(directive, match, buffer, n); } else { - free(directive); + directive_delete(directive); return NULL; } @@ -345,12 +345,14 @@ directive_delete(directive_t *directive) free(operands->content); free(operands->key); free(operands); + break; } case CONTENTFOR: { contentfor_operand_t *operands = directive->operands; free(operands->content); free(operands->key); free(operands); + break; } case PUT: case CONTENT: |