aboutsummaryrefslogtreecommitdiff
path: root/src/lexer.c
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2025-07-30 08:44:05 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2025-07-30 08:44:05 +0530
commit9b68f90d3d705017990d4cf77cdf94c476842c34 (patch)
treed17207025b1ddf66c2e3e9e11bbd4e7d2cb89726 /src/lexer.c
parent6b618e71f577ecc3e2665717515828d1ae12927b (diff)
engine,lexer: avoid memory leaks using delete_directive()
Diffstat (limited to 'src/lexer.c')
-rw-r--r--src/lexer.c28
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: